我将tensorflow网站上的Deep Mnist示例修改为以下内容:
a = np.zeros((5500,10))
a = mnist.train.labels.copy()
batchsize = 250
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(1000):
batch = [mnist.train.images[i:batchsize], a[i:batchsize]]
if i % 10 == 0:
train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_:batch[1], keep_prob: 1.0})
print('step %d, training accuracy %g' % (i, train_accuracy))
train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
del batch
print('test accuracy %g' % accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
save_path = saver.save(sess, "/tmp/model.ckpt")
print("Model saved in file: %s" % save_path)
我所做的只是使用自定义标签数组创建我自己的一批mnist.datasets。
但是当我运行它时,经过一些迭代后,我得到以下输出:
Ran out of GPU memory when allocating 0 bytes for
[[Node: SoftmaxCrossEntropyWithLogits_6 = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"](Reshape_20, Reshape_21)]]
我甚至添加了这些内容:
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
和nvidia-smi告诉我,4Gb应该是免费的。
有没有人知道这个问题,甚至可能知道如何修复它?
答案 0 :(得分:0)
这一行:
batch = [mnist.train.images[i:batchsize], a[i:batchsize]]
会在i >= batchsize
后立即为您提供空批次。实际上,您发布的错误消息显示为Ran out of GPU memory when allocating 0 bytes
。
您可能想要的是(请注意添加的i+
):
batch = [mnist.train.images[i:i+batchsize], a[i:i+batchsize]]
编辑
代码还应按批量大小增加i
,以便在一个训练时期内不重复使用样本:
for i in range(0,1000, batchsize):
请注意,代码也不会循环遍历整个示例,您可以通过执行以下操作来执行此操作:
for i in range(0,len(a), batchsize):
此外,建议以随机顺序循环遍历样本。如果您多次循环样本(这可能会获得与上一次迭代中相同的梯度步骤),这一点非常重要,同时也可以避免因训练样本的特定顺序而产生的任何影响(例如,先学习所有零,然后全部在你的网络可能倾向于将太多的东西归类为9种情况下完成这些工作。