Python 在使用tensorflow对神经网络进行一段时间的训练后生成NAN

Python 在使用tensorflow对神经网络进行一段时间的训练后生成NAN,python,tensorflow,neural-network,Python,Tensorflow,Neural Network,几天后我就面临着这个问题。我不知道我在哪里犯了错误。我的代码很长,无法在这里复制所有内容 以下是第一种情况下的结果: Accuracy: 0.1071 Error: 1.45003 Accuracy: 0.5149 Error: 0.259084 Accuracy: 0.7199 Error: 0.197301 Accuracy: 0.7934 Error: 0.138881 Accuracy: 0.8137 Error: 0.136115 Accuracy: 0.8501 Error: 0.1

几天后我就面临着这个问题。我不知道我在哪里犯了错误。我的代码很长,无法在这里复制所有内容

以下是第一种情况下的结果:

Accuracy: 0.1071 Error: 1.45003
Accuracy: 0.5149 Error: 0.259084
Accuracy: 0.7199 Error: 0.197301
Accuracy: 0.7934 Error: 0.138881
Accuracy: 0.8137 Error: 0.136115
Accuracy: 0.8501 Error: 0.15382
Accuracy: 0.8642 Error: 0.100813
Accuracy: 0.8761 Error: 0.0882854
Accuracy: 0.882 Error: 0.0874575
Accuracy: 0.8861 Error: 0.0629579
Accuracy: 0.8912 Error: 0.101606
Accuracy: 0.8939 Error: 0.0744626
Accuracy: 0.8975 Error: 0.0775732
Accuracy: 0.8957 Error: 0.0909776
Accuracy: 0.9002 Error: 0.0799101
Accuracy: 0.9034 Error: 0.0621196
Accuracy: 0.9004 Error: 0.0752576
Accuracy: 0.9068 Error: 0.0531508
Accuracy: 0.905 Error: 0.0699344
Accuracy: 0.8941 Error: nan
Accuracy: 0.893 Error: nan
Accuracy: 0.893 Error: nan
我尝试过各种方法,但都没能找出我犯的错误

1) 将交叉熵计算更改为不同的内容

self._error = -tf.reduce_sum(y*pred+ 1e-9))
self._error = -tf.reduce_sum(y*pred)
self._error = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=pred, labels=y))
self._error = tf.reduce_mean(-tf.reduce_sum(y * tf.log(pred+1e-8),reduction_indices=1))

out = tf.nn.softmax_cross_entropy_with_logits(logits = pred, labels=y)
self._error= tf.reduce_mean(out)
我已经尝试了所有的优化器 -新加坡元 -亚当 -阿达格拉德 -rmsprop

我使用了tensorflow提供的默认优化器和手动应用的不同参数。在这一点上,我甚至用0.00001的学习率进行了检查

偏差:
我试过1.0和0.0

权重:
使用tf.truncated\u normal\u初始值设定项初始化(stddev=0.1,dtype=tf.float32)

网络:
FC784-FC256-FC128-FC10
我也尝试过它的不同变体

激活功能:
-雷卢 -谭 -泄漏相关系数最大值(输入,0.1*输入)

数据:
MNIST数据集通过将其除以255进行规范化。数据集来自Keras


我知道这个问题是在各种stackoverflow问题中提出的,我已经尝试了der建议的所有方法,据我所知,没有一种方法对我有帮助。

从上面的信息很难判断出哪里出了问题。是的,调试神经网络可能非常乏味。幸运的是,它是一个很好的工具,可以让你在每次迭代时通过网络分析你的权重

在tfdbg中运行以下命令,以获取图形中显示的第一个
nan
inf

run -f has_inf_or_nan

确保您的标签中没有任何标签超过softmax输出的数量-1。在这种情况下,
sigmoid\u cross\u entropy\u与\u logits
将产生NaN,而不是产生错误。通常,如果标签的范围为1..N,但softmax索引的范围为0..N-1

有时设备会给出
None
答案,这是正常的,但如何处理?NAN等于“尚未准备”、“资源正忙”、“值已溢出”等。所有资源访问都获得了
delay
,例如:您在计算机上获得了delay
1/CPU\u CLOCK
。检查您的设备功能。。。0/None=NANI已在3-4个系统中运行该代码。我使用了cpu和gpu,这是相同的情况。