¿Tensorflow NaN error?
Estoy usando TensorFlow y modifiqué eltutorial ejemplo para tomar mis imágenes RGB.
El algoritmo funciona perfectamente desde el primer momento en el nuevo conjunto de imágenes, hasta que de repente (aún convergiendo, generalmente tiene una precisión del 92%), falla con el error de que ReluGrad recibió valores no finitos. La depuración muestra que no ocurre nada inusual con los números hasta que de repente, por razones desconocidas, se produce el error. Agregando
print "max W vales: %g %g %g %g"%(tf.reduce_max(tf.abs(W_conv1)).eval(),tf.reduce_max(tf.abs(W_conv2)).eval(),tf.reduce_max(tf.abs(W_fc1)).eval(),tf.reduce_max(tf.abs(W_fc2)).eval())
print "max b vales: %g %g %g %g"%(tf.reduce_max(tf.abs(b_conv1)).eval(),tf.reduce_max(tf.abs(b_conv2)).eval(),tf.reduce_max(tf.abs(b_fc1)).eval(),tf.reduce_max(tf.abs(b_fc2)).eval())
como código de depuración para cada bucle, produce el siguiente resultado:
Step 8600
max W vales: 0.759422 0.295087 0.344725 0.583884
max b vales: 0.110509 0.111748 0.115327 0.124324
Step 8601
max W vales: 0.75947 0.295084 0.344723 0.583893
max b vales: 0.110516 0.111753 0.115322 0.124332
Step 8602
max W vales: 0.759521 0.295101 0.34472 0.5839
max b vales: 0.110521 0.111747 0.115312 0.124365
Step 8603
max W vales: -3.40282e+38 -3.40282e+38 -3.40282e+38 -3.40282e+38
max b vales: -3.40282e+38 -3.40282e+38 -3.40282e+38 -3.40282e+38
Dado que ninguno de mis valores es muy alto, la única forma en que puede ocurrir un NaN es mediante un 0/0 mal manejado, pero como este código tutorial no hace divisiones u operaciones similares, no veo otra explicación que la que proviene de El código interno de TF.
No tengo idea de qué hacer con esto. ¿Alguna sugerencia? El algoritmo está convergiendo muy bien, su precisión en mi conjunto de validación estaba aumentando constantemente y solo alcanzó el 92.5% en la iteración 8600.