使用Tensorflow的Keras:根据需要使用内存[ResourceExhaustedError]

The*_*-IT 10 python deep-learning keras tensorflow

因此,我试图用多个数据集来获取CNN,当我添加足够的数据时(例如当我添加多个集合作为一个或当我尝试添加具有超过一百万个样本的数据集时),它会抛出一个ResourceExhaustedError.

至于这里的说明,我尝试添加

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))
Run Code Online (Sandbox Code Playgroud)

我的代码,但这不会产生影响.我打印出来后看到0.3,config.gpu_options.per_process_gpu_memory_fraction这样零件接缝就可以了.

我甚至投入了一个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)
Run Code Online (Sandbox Code Playgroud)

Alo*_*lon -1

没有任何设置可以神奇地让您的内存超过 GPU 的内存。在我看来,您的输入太大了,无法容纳 GPU RAM(以及所有所需的状态和梯度)。您应该使用config.gpu_options.allow_growth = True但不是为了获得更多内存,只是为了了解每个输入长度需要多少内存。从较小的长度开始,看看nvidia-smi您的 GPU 占用了多少 RAM,然后增加长度。一遍又一遍地这样做,直到您了解 GPU 可以容纳的最大输入长度(批量大小)是多少。