[PYTHON] J'obtiens une erreur ~ est zéro, U singulier lors du passage d'une matrice distribuée co-distribuée de la couche linéaire à MultivariateNormal

Ce que j'ai fait

pytorch utilise la v1.5.1. Avec la sortie de Linear as (x, y, vxx, vyy, vxy), créez une matrice distribuée co-distribuée et passez-la à MultivariateNormal.

fc = nn.Linear(n, 5)
output = fc(x)
mean = output[:2]
vxx, vyy = nn.Softplus()(output[2:4])
vxy = output[-1]

covariance_matrix = torch.zeros(2, 2)
covariance_matrix[0, 0] += vxx
covariance_matrix[0, 1] += vxy
covariance_matrix[1, 0] += vxy
covariance_matrix[1, 1] += vyy

dist = MultivariateNormal(mean, covariance_matrix)

RuntimeError: cholesky_cuda: For batch 0: U(6,6) is zero, singular U. Puisque MultivariateNormal décompose la matrice distribuée co-distribuée par choleskey, il est nécessaire de donner une matrice de valeur constante positive. Dans l'état actuel des choses, l'erreur ci-dessus se produit car il n'est pas garanti que covariance_matrix soit une matrice de valeurs positives.

Solution: passez la matrice triangulaire inférieure après la décomposition de Kolesky.

fc = nn.Linear(n, 5)
output = fc(x)
mean = output[:2]
a, c = nn.Softplus()(output[2:4])
b = output[-1]

L = torch.zeros(2, 2)
L[0, 0] += a
L[1, 0] += b
L[1, 1] += c

dist = MultivariateNormal(mean,  scale_tril=L)

scale_tril (Tensor) – lower-triangular factor of covariance, with positive-valued diagonal

Par conséquent, les composantes diagonales $ a et c $ sont mises à des valeurs positives par softplus.

Décomposition de Cholesky lors de la création d'une matrice distribuée co-distribuée

\Sigma = LL^{T}

selon,

covariance_matrix = np.dot(L, L.T)

Et c'est suffisant.

Recommended Posts

J'obtiens une erreur ~ est zéro, U singulier lors du passage d'une matrice distribuée co-distribuée de la couche linéaire à MultivariateNormal
Si vous obtenez l'erreur "la matrice de base est singulière à la précision de travail" dans GLPK
J'obtiens une erreur en essayant d'installer maec 4.0.1.0 avec pip
Dans le tutoriel Chainer, j'obtiens une erreur lors de l'importation d'un package. (moquer)
Lorsque j'essaye d'importer des pandas sur macOS, j'obtiens l'erreur No module named'_bz2 '
J'obtiens une erreur lorsque j'essaie d'élever Python à la série 3 en utilisant pyenv dans Catalina
J'obtiens une erreur lorsque je mets opencv dans pyautoGUI
J'obtiens une erreur en essayant meinheld + WebSocket + mongodb
J'obtiens [Erreur 2055] en essayant de me connecter à MySQL avec Heroku
Keras Je veux obtenir la sortie de n'importe quelle couche !!
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai eu une erreur lorsque j'ai essayé de traiter luigi en parallèle dans Windows, mais la solution
Lorsque je démarre le service avec systemd, j'obtiens une commande introuvable même si le chemin passe
À propos de l'erreur que j'ai rencontrée en essayant d'utiliser Adafruit_DHT à partir de Python sur Raspberry Pi
Quand j'obtiens une erreur avec Pylint sur Windows Atom
Que faire lorsque vous obtenez "Je ne peux pas voir le site !!!!"
[Question] Dans la régression de forêt aléatoire de sk-learn, une erreur se produit lorsque le nombre de parallèles est défini sur -1.
[Django] Que faire lorsqu'une erreur d'intégrité se produit lors de l'enregistrement des données du site de gestion dans la base de données
Lorsque j'importe TensorFlow vers Python, j'obtiens "Erreur d'importation: échec du chargement de la DLL: le module spécifié est introuvable."
J'obtiens une erreur lorsque je mets un plug-in Python dans Visual Studio Code sous l'environnement pyenv