Как решить проблему с нехваткой оперативной памяти при обучении модели keras?
Не хватает оперативной памяти, снизил размер изображений до 36 х 36. Этот же размер передаю в input_shape.
Появляется ошибка, где сказано, что памяти не хватает, а в скобках (256 х 256).
От чего так?
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
import os
import keras
import joblib
from keras.preprocessing.image import ImageDataGenerator
train_images = 'C:\\Users\\Администратор\\AppData\\Local\\Programs\\Python\\Python36-32\\train_images'
model = keras.Sequential([
keras.layers.Flatten(input_shape=(36, 36, 3)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.5),
keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
datagen = ImageDataGenerator(rescale = 1. /255)
train_generator = datagen.flow_from_directory(
train_images,
batch_size = 4,
class_mode = 'binary')
model.fit(np.array(train_generator), epochs=10, validation_split = 0.1)
Ошибка (cmd).
Found 336 images belonging to 2 classes.
Traceback (most recent call last):
File "C:\Users\Администратор\AppData\Local\Programs\Python\Python36-32\image_g
uess.py", line 31, in <module>
model.fit(np.array(train_generator), epochs=10, validation_split = 0.1)
File "C:\Users\Администратор\AppData\Local\Programs\Python\Python36-32\lib\sit
e-packages\keras_preprocessing\image\iterator.py", line 104, in __next__
return self.next(*args, **kwargs)
File "C:\Users\Администратор\AppData\Local\Programs\Python\Python36-32\lib\sit
e-packages\keras_preprocessing\image\iterator.py", line 116, in next
return self._get_batches_of_transformed_samples(index_array)
File "C:\Users\Администратор\AppData\Local\Programs\Python\Python36-32\lib\sit
e-packages\keras_preprocessing\image\iterator.py", line 222, in _get_batches_of_
transformed_samples
batch_x = np.zeros((len(index_array),) + self.image_shape, dtype=self.dtype)
MemoryError: Unable to allocate 3.00 MiB for an array with shape (4, 256, 256, 3
) and data type float32
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Для того, чтобы разрешить проблемы с памятью, данные нужно обрабатывать пакетами (по batch_size картинок за раз):
datagen = ImageDataGenerator(rescale=1. / 255)
# size of mini-data
batch_size = 32
# train data
train_data_size = N # общее число картинок в обучающей выборке
train_generator = datagen.flow_from_directory(
train_images,
target_size=(48, 48),
batch_size=batch_size,
class_mode='binary')
model.fit_generator(
train_generator,
steps_per_epoch=train_data_size // batch_size,
epochs=10)