【问题标题】:Is there an arbitary limit on the size of vectors you can put into session.run?您可以放入 session.run 的向量大小是否有任意限制?
【发布时间】:2016-02-16 17:11:09
【问题描述】:

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

我在 Cloud 9 上使用 tensorflow。

起始代码没有问题:

import tensorflow as tf
import input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

x = tf.placeholder(tf.float32, [None, 784]);
W = tf.Variable(tf.zeros([784, 10]));
b = tf.Variable(tf.zeros([10]));

y = tf.nn.softmax(tf.matmul(x, W) + b);

y_ = tf.placeholder(tf.float32, [None, 10]);
cross_entropy = -tf.reduce_sum(y_ * tf.log(y));

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy);

init = tf.initialize_all_variables();

xs = mnist.train.images;
ys = mnist.train.labels;

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1));
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

sess = tf.Session();
sess.run(init);

在教程的训练部分,它说从 55000 张图像的整个训练集中批量获得 100 张图像会更快。代码是:

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}));

这行得通,我得到了教程所说的 %91 准确度。

然后我尝试将整个集合发送到训练中,因为教程建议的计算量很大。我将迭代保持在较低水平,以查看实际发生的情况。

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}));

但是,无论迭代多少次,我的准确率总是 0.098。

然后我尝试了另一种方法来达到同样的效果。

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}));

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

据我所知,您可以发送到培训的项目数量是任意限制的。是真的还是我在这里遗漏了什么?

谢谢。

【问题讨论】:

    标签: python python-2.7 tensorflow


    【解决方案1】:

    示例数量没有限制,但学习率(在您的情况下为0.01)与批量大小相互作用。如果您将批量大小增加 10 倍,那么您的梯度会增加 10 倍,并且您的步长会增加 10 倍。这最终可能会在每个步骤中超出并增加您的目标,而不是减少它。你需要调整你的学习率(尝试通过批量大小乘数的平方根进行潜水),或者使用自适应下降法(AdamOptimizer 会随着时间的推移自动调整学习率)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-20
      • 2023-03-07
      • 2020-11-02
      • 2011-12-19
      • 2011-11-18
      • 1970-01-01
      • 2014-12-06
      • 1970-01-01
      相关资源
      最近更新 更多