为什么TensorFlow示例会失败,为什么它会在批量增加的情况下再次工作?

2024-05-19 02:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了同样的问题,由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都无法阻止它。你知道吗

它们的魔力是什么?你知道吗


Tags: 方法答案模型logreducetfbatchtrain

热门问题