为什么TensorFlow示例失败,为什么它会随批量增加而再次起作用?

时间:2016-07-13 10:41:32

标签: python tensorflow

我遇到了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在这里用作损失函数:

cross_entropy = -tf.reduce_sum(y_*tf.log(y))  

在前面提到的帖子中,我找到了一些很好的答案,提出了三种方法:

1)dga提到将学习率从0.01降低到0.005 2)colah提到在计算cross_entropy时将reduce_sum更改为reduce_mean 3)Muaaz提到在计算cross_entropy时将log(y)更改为log(y + 1e-10)

他们都工作!该模型采用3种方式中的任何一种后收敛。

但我的进一步问题是:
根据第三种方式,失败的原因是log(0)发生。这实际上是通过在训练期间打印出最小值来证明的。发生log(0),然后cross_entropy变为Nan

但如何解释第一和第二种方式?他们为什么工作? y是一个矩阵,包含每个输入案例的概率为数字' 0' 9'因此预期越来越多的y元素在训练继续时变为0。无论是方式1还是方式2都无法阻止它。

他们的魔力是什么?

0 个答案:

没有答案