[PYTHON] Ich erhalte den Fehler ~ ist Null, Singular U, wenn eine verteilte, gemeinsam verteilte Matrix von der linearen Schicht an MultivariateNormal übergeben wird

Was ich getan habe

pytorch verwendet v1.5.1. Die Ausgabe von Linear wird auf (x, y, vxx, vyy, vxy) gesetzt, eine verteilte, gemeinsam verteilte Matrix wird erstellt und an MultivariateNormal übergeben.

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. Da MultivariateNormal die verteilte, gemeinsam verteilte Matrix nach Choleskey zerlegt, muss eine positive Konstantwertmatrix angegeben werden. Der obige Fehler tritt auf, weil covariance_matrix nicht garantiert eine positive Wertematrix ist.

Lösung: Führen Sie die untere Dreiecksmatrix nach der Kolesky-Zersetzung durch.

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

Daher werden die diagonalen Komponenten $ a und c $ durch softplus auf positive Werte gesetzt.

Cholesky-Zersetzung bei der Herstellung einer verteilten, gemeinsam verteilten Matrix

\Sigma = LL^{T}

in Übereinstimmung mit,

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

Und es ist ausreichend.

Recommended Posts

Ich erhalte den Fehler ~ ist Null, Singular U, wenn eine verteilte, gemeinsam verteilte Matrix von der linearen Schicht an MultivariateNormal übergeben wird
Wenn Sie den Fehler "Basismatrix ist singulär zur Arbeitsgenauigkeit" in GLPK erhalten
Beim Versuch, maec 4.0.1.0 mit pip zu installieren, wird eine Fehlermeldung angezeigt
Im Chainer-Tutorial wird beim Importieren eines Pakets eine Fehlermeldung angezeigt. (spotten)
Wenn ich versuche, Pandas unter macOS zu importieren, wird die Fehlermeldung Kein Modul mit dem Namen'_bz2 'angezeigt.
Ich erhalte eine Fehlermeldung, wenn ich versuche, Python mit pyenv in Catalina auf 3 Serien zu erhöhen
Ich erhalte eine Fehlermeldung, wenn ich opencv in pyautoGUI einfüge
Beim Versuch meinheld + WebSocket + mongodb wird eine Fehlermeldung angezeigt
Ich erhalte [Fehler 2055], wenn ich versuche, mit Heroku eine Verbindung zu MySQL herzustellen
Keras Ich möchte die Ausgabe einer beliebigen Ebene erhalten !!
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe einen Fehler bekommen, als ich versucht habe, Luigi parallel in Windows zu verarbeiten, aber die Lösung
Wenn ich den Dienst mit systemd starte, wird der Befehl nicht gefunden, obwohl der Pfad übergeben wird
Über den Fehler, den ich beim Versuch, Adafruit_DHT von Python auf Raspberry Pi zu verwenden, festgestellt habe
Wenn ich eine Fehlermeldung mit Pylint unter Windows Atom erhalte
Was tun, wenn "Ich kann die Site nicht sehen !!!!"
[Frage] Bei der zufälligen Waldregression von sk-learn tritt ein Fehler auf, wenn die Anzahl der Parallelen auf -1 gesetzt wird.
[Django] Was tun, wenn beim Registrieren von Daten von der Verwaltungssite in die Datenbank ein Integritätsfehler auftritt?
Wenn ich TensorFlow nach Python importiere, wird "Importfehler: DLL-Ladevorgang fehlgeschlagen: Das angegebene Modul wurde nicht gefunden" angezeigt.
Ich erhalte eine Fehlermeldung, wenn ich ein Python-Plug-In in Visual Studio Code in die pyenv-Umgebung einfüge