我遇到了同样的问题,由pythonic隐喻发布,在这里描述: Why does TensorFlow example fail when increasing batch size? 我已经通读了它和它伟大的答案,但还有一些问题。你知道吗
让我再描述一下这个问题:
我在看http://www.tensorflow.org/tutorials/mnist/beginners/index.md时发现在这一部分:
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
将批大小从100更改为等于或大于209会导致模型无法收敛。你知道吗
交叉熵用作损失函数:
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
在前面提到的帖子中,我找到了一些很好的答案,提出了三种方法:
1)dga提到将学习率从0.01
降低到0.005
2) colah提到在计算交叉熵时,把reduce_sum
变成reduce_mean
3) Muaaz提到在计算交叉熵时,把log(y)
变成log(y + 1e-10)
他们都工作!采用上述三种方法中的任意一种后,模型收敛。你知道吗
但我进一步的问题是:
根据第三种方法,失败的原因是log(0)
发生了。这实际上是通过在训练期间打印出y的最小值来证明的。log(0)
发生,交叉熵变为Nan
。你知道吗
但是如何解释第一和第二种方式呢?他们为什么工作?
y是一个矩阵,它包含了每一个输入案例都是数字“0”~“9”的概率,因此,随着训练的进行,预计会有越来越多的y元素变成0。方法1和方法2都无法阻止它。你知道吗
它们的魔力是什么?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐