你确定你没有使用巨大的batch_size吗?
“添加数据”:说实话,我不知道这意味着什么,如果你能用代码准确描述你在这里做什么,那将会有所帮助.
样本数量不应该导致GPU内存出现任何问题.导致问题的是一个很大的batch_size.
加载庞大的数据集可能会导致CPU RAM问题,与keras / tensorflow无关. numpy数组太大的问题. (您可以通过简单地加载数据来测试“无需创建任何模型”)
如果这是您的问题,您应该使用生成器逐渐加载批次.同样,由于你的问题绝对没有代码,我们无能为力.
但这些只是简单地为图像创建生成器的两种形式:
>使用现有的ImageDataGenerator及其flow_from_directory()方法,explained here
>创建自己的编码生成器,可以是:
循环生成器的快速示例:
def imageBatchGenerator(imageFiles, imageLabels, batch_size):
while True:
batches = len(imageFiles) // batch_size
if len(imageFiles) % batch_size > 0:
batches += 1
for b in range(batches):
start = b * batch_size
end = (b+1) * batch_size
images = loadTheseImagesIntoNumpy(imageFiles[start:end])
labels = imageLabels[start:end]
yield images,labels
Warning: even with generators, you must make sure your batch size is not too big!
使用它:
model.fit_generator(imageBatchGenerator(files,labels,batchSize), steps_per_epoch = theNumberOfBatches, epochs= ....)
在GPU之间划分模型
您应该能够决定哪些GPU由哪个GPU处理,这“可能”可能会优化您的RAM使用率.
例如,在创建模型时:
with tf.device('/gpu:0'):
createLayersThatGoIntoGPU0
with tf.device('/gpu:1'):
createLayersThatGoIntoGPU1
#you will probably need to go back to a previous GPU, as you must define your layers in a proper sequence
with tf.device('/cpu:0'):
createMoreLayersForGPU0
#and so on
我不确定这会好不好,但也值得一试.