也许这个问题太笼统了,但有人能解释什么会导致卷积神经网络发散吗
具体内容:
我正在使用Tensorflow的iris_训练模型和我自己的一些数据,并不断获得
错误:tensorflow:模型发散,损失=NaN
回溯
tensorflow.contrib.learn.python.learn.monitors.NanlossDuringTraining错误:训练期间NaN丢失
源于行的回溯:
tf.contrib.learn.DNNClassifier(功能列=功能列,
隐藏单位=[300300300],
#优化器=tf.train.ProximalAdagradOptimizer(学习率=0.001,l1正则化强度=0.00001),
n_类=11,
型号“dir=”tmp/iris“型号”
我尝试过调整优化器,使用零表示学习率,不使用优化器。如能深入了解网络层、数据大小等,将不胜感激
我见过很多东西使模型产生分歧
-
学习率太高了。如果损失开始增加,然后发散到无穷大,通常可以判断情况是否如此
-
我不太熟悉DNNClasifier,但我猜它使用了分类交叉熵代价函数。这涉及到获取预测日志,该日志随着预测接近零而发散。这就是为什么人们通常在预测中加入一个小的ε值来防止这种差异。我猜DNNClassier可能会这样做,或者使用tensorflow opp。可能不是问题所在
-
还可能存在其他数值稳定性问题,如除零,增加ε可以有所帮助。另一个不太明显的问题是,在处理有限精度数字时,如果不适当简化,who导数的平方根可能会发散。然而,我再一次怀疑DNNClassifier的情况是否存在这一问题
-
您可能对输入数据有问题。尝试对输入数据调用
assert not np.any(np.isnan(x)),以确保没有引入nan。还要确保所有目标值都有效。最后,确保数据正确规范化。您可能希望像素的范围为[-1,1],而不是[0,255] -
标签必须位于损失函数的域中,因此如果使用基于对数的损失函数,则所有标签必须为非负(如evan pu和下面的注释所述)