Problem
Ich bin ein Tief Neural Network auf dem MNIST laufen, wo der Verlust wie folgt definiert:Wie man Nanverlust löst?
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, label))
Das Programm scheint korrekt zu funktionieren, bis ich einen nan Verlust im 10000+ bekommen Minibatch. Manchmal läuft das Programm bis zum Ende korrekt. Ich denke, tf.nn.softmax_cross_entropy_with_logits
gibt mir diesen Fehler. Dies ist seltsam, weil der Code nur mul
und add
Operationen enthält.
Mögliche Lösung
Vielleicht kann ich verwenden:
if cost == "nan":
optimizer = an empty optimizer
else:
...
optimizer = real optimizer
Aber ich kann nicht die Art von nan
finden. Wie kann ich überprüfen, ob eine Variable nan
ist oder nicht?
Wie sonst kann ich dieses Problem lösen?
prüfen Umsetzung von „tf.add_check_numerics_ops“, die 'Assert' ops jedem Tensor ergänzt um sicherzustellen, dass es keine nans, Sie können so verwenden, was es für nanness überprüfen verwendet –
Ich bin neu in tensorflow, wenn ich "tf.add_check_numerics_ops", es bringt mir einen Fehler "tensorflow.python.framework.errors.InvalidArgumentError: Alle Eingaben in das Knotenmodell/CheckNumerics_254 müssen vom selben Frame stammen." Habe ich es falsch benutzt? –
Ich meinte nur, dass Sie in der Implementierung von 'add_check_numerics_ops' schauen können, um zu sehen, welche Op bestimmt, ob eine Variable NaN ist, und diese Op –