Open dherrera1911 opened 6 months ago
Alas, these parametrisations are not compositional as-is, but it shouldn't be too difficult to implement your own.
Note that the class PSD
is implemented in terms of the class PSSDFixedRank
by fixing the rank to be the highest and choosing a particular transformation like softplus
https://github.com/lezcano/geotorch/blob/ba38d406c245d609fee4b4dac3f6427bf6d73a8e/geotorch/psd.py#L6
On the other hand, sl(n)
is implemented in a similar way, but tweaking the function that's used to define the eigenvalues (we normalise them so that their product is one):
https://github.com/lezcano/geotorch/blob/ba38d406c245d609fee4b4dac3f6427bf6d73a8e/geotorch/sl.py#L31-L42
As such, you can inherit from PSD and implement your own class where you pass in a normalised function like we do in SL(n) to the parent class. You'll also need to implement the method in_manifold_eigen
and sample
, similar to how SL(n)
does it.
Please reach out if there is anything that's not clear :)
Hello,
I am wondering whether two parametrizations can be used on a same tensor. In particular, I want to parametrize a matrix to be both positive definite and in the SL group.
In the example below, I create a class with a matrix that should be both PSD and SLN:
However, I get the following error when I initialize the class:
I think that the parametrized tensor gets re-initialized by SLN, and so it is no longer PSD, leading to the error. Is there some way to do something as intended here with geotorch?