Uruchomiłem TensorFlow i zdarzyło mi się, że mam coś na NaN. Chciałbym wiedzieć, co to jest, ale nie wiem, jak to zrobić. Głównym problemem jest to, że w "normalnym" programie proceduralnym napisałbym instrukcję print tuż przed wykonaniem operacji. Problem z TensorFlow polega na tym, że nie mogę tego zrobić, ponieważ najpierw deklaruję (lub definiuję) wykres, więc dodawanie instrukcji drukowania do definicji wykresu nie pomaga. Czy istnieją jakieś zasady, porady, heurystyki, wszystko, co może być przyczyną NaN?W jaki sposób jeden debuguje wartości NaN w TensorFlow?
W tym przypadku wiem więcej właśnie linia patrzeć bo mam następujące:
Delta_tilde = 2.0*tf.matmul(x,W) - tf.add(WW, XX) #note this quantity should always be positive because its pair-wise euclidian distance
Z = tf.sqrt(Delta_tilde)
Z = Transform(Z) # potentially some transform, currently I have it to return Z for debugging (the identity)
Z = tf.pow(Z, 2.0)
A = tf.exp(Z)
gdy linia ta jest obecna mam to, że zwraca NaN deklarowanego przez moich pisarzy podsumowania . Dlaczego to? Czy istnieje sposób, aby przynajmniej zbadać, jaką wartość ma Z, po kwadratowej podstawie?
Na konkretnym przykładzie napisałem, próbowałem tf.Print(0,Z)
ale bez powodzenia to wydrukowane nic. Jak w:
Delta_tilde = 2.0*tf.matmul(x,W) - tf.add(WW, XX) #note this quantity should always be positive because its pair-wise euclidian distance
Z = tf.sqrt(Delta_tilde)
tf.Print(0,[Z]) # <-------- TF PRINT STATMENT
Z = Transform(Z) # potentially some transform, currently I have it to return Z for debugging (the identity)
Z = tf.pow(Z, 2.0)
A = tf.exp(Z)
I rzeczywiście nie rozumieją, co tf.Print
jest przypuszczać, aby zrobić. Dlaczego potrzebuje dwóch argumentów? Jeśli chcę wydrukować 1 tensor, dlaczego muszę podać 2? Wydaje mi się dziwne.
Szukałem w funkcji tf.add_check_numerics_ops() ale nie mówi, jak go używać (plus docs wydają się nie być bardzo pomocne). Czy ktoś wie, jak tego użyć?
Ponieważ komentarze dotyczące danych mogą być złe, używam standardowego MNISTU. Jednak obliczam ilość, która jest dodatnia (odległość eucledian w parze), a następnie kwadratowo ją kroi. W związku z tym nie widzę, w jaki sposób dane byłyby konkretnie problemem.
FYI to zdobywa pewne ops kiedy są używane optymalizujące - https://github.com/tensorflow/tensorflow/issues/2288 –