Как предотвратить заполнение оперативной памяти при классификации изображений (DL)

#python #keras #deep-learning #computer-vision #google-colaboratory

Вопрос:

Я новичок в ML, и у меня есть проблема. У меня есть 10000 изображений (300 300)пикселей. Я хочу включить их в модель DL для классификации. но моя проблема в том, что когда я нормализую изображения (преобразую каждое изображение из uint8 в плавающее и делю на 255), моя оперативная память отказала! Я имею в виду, что моя оперативная память Google Colab заполняется.

  • Есть ли решение или методика для этой проблемы ?
  • Есть ли способ, чтобы (например) Я могу разделить свои данные на 3 части (3300 изображений в каждой части), затем нормализовать и передать эту часть модели для обучения отдельно? (и после части 1 очистите оперативную память, а часть 2 Нормализуйте тренируйтесь)

Спасибо.

это мой код:

 data_train = np.asarray(data_train)
data_train = data_train.astype('float16') #data_train.shape: (10000, 300, 300, 3)
data_valid = np.asarray(data_valid)
data_valid = data_valid.astype('float16')

data_train/=255.0  #This part fills my memory !! 
data_valid/=255.0  #This part fills my memory !!

model = #confing the model ...
model.compile(loss=... ,optimizer=...,metrics=...)
datagen = ImageDataGenerator(...)
datagen.fit(data_train)
history = model.fit(datagen.flow(data_train,labels_train,batch_size=...),
                    steps_per_epoch=...,
                    epochs=...,
                    validation_data=(data_valid,labels_valid))
 

Ответ №1:

Как правило, мы загружаем не все данные один раз (в вашем случае 10 000 изображений). Минимальное количество изображений, которое вам нужно загрузить в память сразу, — это размер вашей партии.
Что касается вашего второго вопроса — да, это общепринятый способ работы с большими наборами данных. Во-первых, вы должны загрузить только batch_size нормализованное количество изображений и передать их в классификатор. Посмотрите, поможет ли это вашей реализации.