Problem
biegnę Deep Neural Network na MNIST gdzie strata zdefiniowana następująco:Jak rozwiązać problem strat nan?
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, label))
program wydaje się działać poprawnie, dopóki nie dostanę stratę nan w 10000+ th minibatch. Czasami program działa poprawnie, aż do zakończenia. Myślę, że tf.nn.softmax_cross_entropy_with_logits
daje mi ten błąd. To dziwne, ponieważ kod zawiera tylko operacje mul
i add
.
Możliwe rozwiązanie
Może używać:
if cost == "nan":
optimizer = an empty optimizer
else:
...
optimizer = real optimizer
Ale nie mogę znaleźć typ nan
. Jak mogę sprawdzić zmienną jest nan
czy nie?
Jak inaczej mogę rozwiązać ten problem?
Sprawdź implementację "tf.add_check_numerics_ops", która dodaje 'Assert' ops do każdego tensora, aby upewnić się, że nie ma nans, więc możesz użyć wszystkiego, co używa do sprawdzenia nanness –
Jestem nowicjuszem tensorflow, kiedy używam "tf.add_check_numerics_ops", przynosi mi błąd "tensorflow.python.framework.errors.InvalidArgumentError: Wszystkie dane wejściowe do modelu węzła/CheckNumerics_254 muszą pochodzić z tej samej ramki." Czy użyłem go w niewłaściwy sposób? –
Po prostu chodziło o to, że możesz zajrzeć do implementacji 'add_check_numerics_ops', aby zobaczyć, który op determinuje, czy zmienna ma wartość NaN, i użyć tego op –