【发布时间】:2018-06-26 03:11:51
【问题描述】:
所以我试图用多个数据集来维护我的 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)
【问题讨论】:
-
这通常发生在 GPU 上没有足够的 RAM 来加载整个数据集(或其中的一批)时。您也可以发布您的代码吗?此外,如果您的图像文件在硬盘上,您是否尝试过使用
ImageDataGenerator类及其flow_from_directory方法?另外,您应该 properly set up your model 能够在多个 GPU 上训练它。 -
我不会发布我的整个代码,因为其中很多是不相关的,而且因为它很长而且需要更多的时间来完成它,而不是对这里的大多数人来说是值得的,但我会如果您愿意,很乐意发布代码的特定部分。我会尝试使用 ImageDataGenerator。让我们看看发生了什么。感谢您的回复
-
在查看了 ImageDataGenerator 之后,我意识到我实际上是在代码中自己手动完成的。我对其进行了测试,它可以正常工作,而且使用 Keras 的那个对我来说不起作用,因为我需要拆分每个图像而不是简单地调整它的大小
-
请发布您的生成器和适合的方法。
-
@The-IT 然后发布相关部分,例如网络架构(即使用的层)、
fit_generator方法和生成器本身。
标签: python tensorflow keras deep-learning