为什么Keras ImageDataGenerator抛出内存错误?

时间:2019-11-28 01:38:15

标签: python tensorflow keras

我正在Keras中构建一个简单的“猫与狗分类器”。拟合ImageDataGenerator时,我得到MemoryError。我的代码如下:

from keras.preprocessing.image import ImageDataGenerator

image_gen = ImageDataGenerator(shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True) 

image_gen.fit(X)

X的形状为(25000,150,150,3)

我在做什么错或如何解决?

我已经检查了thisthis

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-10-2fd88662a693> in <module>
----> 1 image_gen.fit(X)

/opt/conda/lib/python3.6/site-packages/keras_preprocessing/image/image_data_generator.py in fit(self, x, augment, rounds, seed)
    943             np.random.seed(seed)
    944 
--> 945         x = np.copy(x)
    946         if augment:
    947             ax = np.zeros(

/opt/conda/lib/python3.6/site-packages/numpy/lib/function_base.py in copy(a, order)
    790 
    791     """
--> 792     return array(a, order=order, copy=True)
    793 
    794 # Basic operations

MemoryError: 

1 个答案:

答案 0 :(得分:1)

您正在生成器中使用数据增强,这实际上使您拥有的图像数量增加了三倍。您的计算机很可能无法处理内存中的75k图像(由于RAM不足,尤其是GPU RAM不足)。您的选择是减小图像大小,减少扩充,或者让数据生成器从文件夹读取图像而不将其存储在内存中(按批处理)。

here如下所示:

train_datagen = ImageDataGenerator(shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        'data/train',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
        'data/validation',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

# Change to match your problem
model.fit_generator(
        train_generator,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=validation_generator,
        validation_steps=800)