运行 分配 0 字节时 GPU 内存不足
Ran out of GPU memory when allocating 0 bytes
我把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 应该是免费的。
有没有人知道这个问题或者甚至知道如何解决它?
这一行:
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):
此外,建议以随机顺序循环样本。如果您多次循环样本(您可能会获得与上一次迭代相同的梯度步长),这一点很重要,这也是为了避免由于训练样本的特定顺序而产生的任何影响(例如,先学习全零,然后再学习所有一个并以九结束你的网络可能倾向于将太多的东西归类为九)。
我把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 应该是免费的。
有没有人知道这个问题或者甚至知道如何解决它?
这一行:
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):
此外,建议以随机顺序循环样本。如果您多次循环样本(您可能会获得与上一次迭代相同的梯度步长),这一点很重要,这也是为了避免由于训练样本的特定顺序而产生的任何影响(例如,先学习全零,然后再学习所有一个并以九结束你的网络可能倾向于将太多的东西归类为九)。