python – 使用Tensorflow的Keras:根据需要使用内存[ResourceExhaustedError]
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用Tensorflow的Keras:根据需要使用内存[ResourceExhaustedError],小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3247字,纯文字阅读大概需要5分钟。
内容图文
![python – 使用Tensorflow的Keras:根据需要使用内存[ResourceExhaustedError]](/upload/InfoBanner/zyjiaocheng/953/41dcc20cce9a49c2aee684f0040defd4.jpg)
因此,我试图用多个数据集来获取CNN,当我添加足够的数据时(例如当我添加多个集合作为一个或当我尝试添加具有超过一百万个样本的数据集时),它会抛出ResourceExhaustedError .
至于指令here,我尝试添加
from keras.backend.tensorflow_backend import set_session
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3
set_session(tf.Session(config=config))
我的代码,但这不会产生影响.
我打印出config.gpu_options.per_process_gpu_memory_fraction后看到0.3,这样零件接缝就可以了.
我甚至投入了一个config.gpu_options.allow_growth = True以获得良好的测量结果,但它并不是想要做任何事情,而是试图一次性使用所有内存,但却发现它还不够.
我试图用来训练这个CNN的计算机有4个GTX1080 Ti,每个都有12GB的专用内存.
编辑:我很抱歉没有说明我是如何加载数据的,老实说我没有意识到有多种方法.在我学习的时候,他们总是有一些例子,其中加载了已经内置的数据集,并且我花了一些时间才意识到如何加载自提供的数据集.
我这样做的方式是我创建了两个numpy数组.一个具有路径或每个图像,另一个具有相应的标签.这是最基本的例子:
data_dir = "folder_name"
# There is a folder for every form and in that folder is every line of that form
for filename in glob.glob(os.path.join(data_dir, '*', '*')):
# the format for file names are: "{author id}-{form id}-{line number}.png"
# filename is a path to the file so .split('\\')[-1] get's the raw file name without the path and .split('-')[0] get's the author id
authors.append(filename.split('\\')[-1].split('-')[0])
files.append(filename)
#keras requires numpy arrays
img_files = np.asarray(files)
img_targets = np.asarray(authors)
解决方法:
你确定你没有使用巨大的batch_size吗?
“添加数据”:说实话,我不知道这意味着什么,如果你能用代码准确描述你在这里做什么,那将会有所帮助.
样本数量不应该导致GPU内存出现任何问题.导致问题的是一个很大的batch_size.
加载庞大的数据集可能会导致CPU RAM问题,与keras / tensorflow无关. numpy数组太大的问题. (您可以通过简单地加载数据来测试“无需创建任何模型”)
如果这是您的问题,您应该使用生成器逐渐加载批次.同样,由于你的问题绝对没有代码,我们无能为力.
但这些只是简单地为图像创建生成器的两种形式:
>使用现有的ImageDataGenerator及其flow_from_directory()方法,explained here
>创建自己的编码生成器,可以是:
>一个收益率的循环
>源自keras.utils.Sequence的类
循环生成器的快速示例:
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
我不确定这会好不好,但也值得一试.
点击此处查看更多详情:https://keras.io/getting-started/faq/#how-can-i-run-a-keras-model-on-multiple-gpus
内容总结
以上是互联网集市为您收集整理的python – 使用Tensorflow的Keras:根据需要使用内存[ResourceExhaustedError]全部内容,希望文章能够帮你解决python – 使用Tensorflow的Keras:根据需要使用内存[ResourceExhaustedError]所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。