【发布时间】:2017-11-12 15:09:27
【问题描述】:
我正在训练卷积神经网络 (CNN),在 MNIST 上进行 X 次迭代后,我的训练和验证准确度显着下降:
X 似乎取决于学习率。修改 dropouts 似乎对该现象没有任何影响。我用较低的报告进行了测试(每 100 批报告一次),并注意到下降发生得非常快。掉落后精度不会恢复。
training_accuracy / validation_accuracy => 1.0000 / 1.0000 for step 10000
training_accuracy / validation_accuracy => 0.9833 / 1.0000 for step 20000
training_accuracy / validation_accuracy => 1.0000 / 1.0000 for step 30000
training_accuracy / validation_accuracy => 1.0000 / 1.0000 for step 40000
training_accuracy / validation_accuracy => 1.0000 / 1.0000 for step 50000
training_accuracy / validation_accuracy => 0.1000 / 0.1000 for step 60000
training_accuracy / validation_accuracy => 0.1000 / 0.1000 for step 69999
我的 CNN 是典型的 CNN,从 0 开始训练。代码可用 here。数据集是标准的 MNIST 数据集,有两个捕获:
- 我向具有非常低值的图像添加随机噪声
- 我随机左右移动图像几个像素
这不是过度拟合,因为训练准确度也会下降。
我注意到在那次下跌之后所有的预测都是0。所以准确率是1/10 = 0.1(因为CNN预测总是0)
你知道那是什么现象吗?感谢您的想法和反馈。
更新 1: 我注意到所有的 tf 权重和偏差都用 nan 填充:
2017-06-10 13:06:34.814975: I tensorflow/core/kernels/logging_ops.cc:79] This is W_fc1: [[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan]...]
2017-06-10 13:06:34.830064: I tensorflow/core/kernels/logging_ops.cc:79] This is b_fc1: [nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan...]
2017-06-10 13:06:34.840501: I tensorflow/core/kernels/logging_ops.cc:79] This is W_fc2: [[nan nan nan nan nan nan nan nan nan nan][nan nan nan nan nan nan nan nan nan nan][nan nan nan nan nan nan nan nan nan nan][nan nan nan nan nan nan nan nan nan nan][nan nan nan nan nan nan nan nan nan nan][nan nan nan nan nan nan nan nan nan nan][nan nan nan nan nan nan nan nan nan nan][nan nan nan nan nan nan nan nan nan nan][nan nan nan nan nan nan nan nan nan nan][nan nan nan nan nan nan nan nan nan nan]...]
2017-06-10 13:06:34.851325: I tensorflow/core/kernels/logging_ops.cc:79] This is b_fc2: [nan nan nan nan nan nan nan nan nan nan]
【问题讨论】:
-
NaNs 意味着损失爆炸了,你的学习率可能太高了。
-
我认为损失不会激增。它正在慢慢变为 0。还是我误解了你?
-
我在日志函数中添加了常量,可能会有所帮助:
tf.log(y + small_constant). -
您能否使用捕获您编辑的输出的日志语句推送代码?
-
代码链接已损坏。请在此处或某个永久位置添加代码
标签: machine-learning computer-vision deep-learning conv-neural-network