这听起来更适合 Keras ImageDataGenerator 类和使用 ImageDataGenerator.flow_from_directory 方法。您不必对它使用数据扩充(这会进一步减慢速度),但您可以选择从目录中提取的批量大小,而不是全部加载。
抄自https://keras.io/preprocessing/image/,稍作修改,附注。
train_datagen = ImageDataGenerator( # <- customize your transformations
rescale=1./255,
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, # <- control how many images are loaded each batch
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
'data/validation',
target_size=(150, 150),
batch_size=32,
class_mode='binary')
model.fit_generator(
train_generator,
steps_per_epoch=2000, # <- reduce here to lower the overall images used
epochs=50,
validation_data=validation_generator,
validation_steps=800)
编辑
根据您在下面的问题...
steps_per_epoch 决定了每个 epoch 加载了多少批次。
例如:
- steps_per_epoch = 50
- batch_size = 32
- epochs = 1
将为您提供该时期总共 1,600 张图像。这恰好是 8,000 张图像的 20%。 注意,如果批处理大小为 32 时遇到内存问题,您可能需要减少此值并增加 step_per_epoch。这需要一些修补才能让它正确。