我是tensorflow的新手,我正在努力训练CIFAR 10数据集。我注意到无论根据我的nvidia控制面板我使用的批量大小,我使用的是97%的gpu内存。我尝试批量大小为100到2,在每种情况下我的gpu内存使用率总是97%。为什么要这样做?
def batchGenerator(batch_size = 32):
bi = 0
random.shuffle(train_data)
while bi + batch_size < len(train_data):
x = np.zeros((batch_size, 32, 32, 3))
y = np.zeros((batch_size, 10))
for b in range(batch_size):
x[b] = train_data[bi + b][0]
if random.choice((True, False)):
img = cv2.flip(x[b], 0)
if random.choice((True, False)):
img = cv2.flip(x[b], 1)
y[b][train_data[bi + b][1]] = 1
bi += batch_size
yield(x, y)
with tf.Session() as s:
s.run(tf.initialize_all_variables())
for epoch in range(100):
a = 0.0
i = 0
for x_train, y_train in batchGenerator(2):
outs = s.run([opt, accuracy], feed_dict = {x: x_train, y_exp: y_train, p_keep: 0.5})
a += outs[-1]
i += 1
print('Epoch', epoch, 'Accuracy', a / i)
答案 0 :(得分:7)
此问题与How to prevent tensorflow from allocating the totality of a GPU memory?
有关TensorFlow默认使用GPU的所有内存,这是正常行为。从教程Using GPUs:
默认情况下,TensorFlow几乎映射了进程可见的所有GPU的所有GPU内存。这样做是为了通过减少内存碎片来更有效地使用设备上相对宝贵的GPU内存资源。
如果您需要减少TensorFlow占用的内存,它们还提供不同的选项,例如:
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config, ...)
(来自链接的文档),将内存使用限制为GPU可用内存的40%。