对于你可以放入session.run的向量大小是否有任何限制?

时间:2016-02-16 17:11:10

标签: python python-2.7 tensorflow

我最近开始学习tensorflow,我在tensorflow网站上做了第一个教程,我遇到了一个问题。

我在Cloud 9上使用tensorflow。

起始代码没有问题:

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})
  print str(i) + " -> " + str(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}));

在本教程的培训部分,它表示从55000张图像的整个训练集中获取100批图像的速度更快。代码是:

for i in range(100):
    sess.run(train_step, feed_dict = {x: batch_xs, y_: batch_ys});
    print str(i) + " -> " + str(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}));

这很有效,我按照教程的说法得到了%91的准确度。

然后我尝试将整个集合发送到培训中,因为教程建议计算成本很高。我保持低迭代次数以查看实际发生的情况。

for i in range(100):
    for start, end in zip(range(0,len(xs),50), range(50, len(ys), 50)):
        sess.run(train_step, feed_dict = {x: xs[start:end], y_: ys[start:end]});
    print str(i) + " -> " + str(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}));

然而,无论迭代次数多少,我总是得到0.098的准确度。

然后我尝试了另一种方法来实现相同的结果。

{{1}}

在这个例子中,它在整个集合50上迭代50个。这个方法最多可以工作200个200.在200之后,无论数字是多少,我都能得到0.098的准确度。

据我了解,您可以向培训发送的项目数量有任意限制。是真的还是我错过了什么?

谢谢。

1 个答案:

答案 0 :(得分:4)

示例数量没有限制,但学习率(在您的情况下为0.01)与批量大小相互作用。如果您将批量大10倍,则渐变量会大10倍,步长会增加10倍。这可能会导致超调并在每一步增加您的目标而不是减少它。您需要调整学习率(尝试按批量大小乘数的平方根潜水),或使用自适应下降法(AdamOptimizer将自动调整学习率随时间推移)