可以放入 session.run 的向量大小是否有任意限制?
Is there an arbitary limit on the size of vectors you can put into session.run?
我最近开始学习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。
据我了解,您可以发送到培训中的项目数量是有任意限制的。是真的还是我遗漏了什么?
谢谢。
示例数量没有限制,但学习率(0.01
在您的情况下)与批量大小相互作用。如果您将批量大小扩大 10 倍,那么您的梯度就会大 10 倍,并且您的步长也会增加 10 倍。这可能会导致过度调整并在每一步增加而不是减少 objective。您需要调整您的学习率(尝试按批量大小乘数的平方根潜水),或使用自适应下降法(AdamOptimizer
将随时间自动调整学习率)
我最近开始学习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。
据我了解,您可以发送到培训中的项目数量是有任意限制的。是真的还是我遗漏了什么?
谢谢。
示例数量没有限制,但学习率(0.01
在您的情况下)与批量大小相互作用。如果您将批量大小扩大 10 倍,那么您的梯度就会大 10 倍,并且您的步长也会增加 10 倍。这可能会导致过度调整并在每一步增加而不是减少 objective。您需要调整您的学习率(尝试按批量大小乘数的平方根潜水),或使用自适应下降法(AdamOptimizer
将随时间自动调整学习率)