Вместо того, чтобы пытаться загрузить все в память, используйте функцию генератора.Это будет считывать данные в память пакетами, а затем проталкивать эти пакеты через нейронную сеть.Keras имеет встроенные функции генератора, предназначенные именно для чтения пакетов данных изображения с диска.
См. https://keras.io/preprocessing/image/
Вот небольшой пример сценария:
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
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,
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,
epochs=50,
validation_data=validation_generator,
validation_steps=800)
Вышеприведенное предполагает, что вы делаете двоичную классификацию (установленную в "class_mode"), но вы также можете делать "категориальные", "разреженные", "вводные данные" и т. Д. Если вам нужно что-то еще, вы также можете создать свою собственнуюгенератор, или адаптировать Keras один.