我正在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)
我在做什么错或如何解决?
---------------------------------------------------------------------------
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:
答案 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)