Как решить проблему с нехваткой оперативной памяти при обучении модели 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 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
Быстрая загрузка большого количества данных в Google Colab
Доброго времени суток, Хабр. Решил поделиться своим знанием, как можно быстро загрузить большое количество файлов в Google Colab с Google Drive.
Всем известно, что Google Colab отличная бесплатная платформа для обучения и экспериментов над Нейронными Сетями.
На платформе Google Colab Вам бесплатно предоставят мощную видеокарту на которой вы сможете поэкспериментировать с обучением своей нейросети на протяжении примерно 12 часов.
Затем сеанс прервется, но на следующий день от Google можно опять будет получить видеокарту и продолжить свои эксперименты.
Нейронным сетям требуется очень много данных для обучения, особенно если речь идет о нейросетях работающих с изображениями.
Для обучения таких нейросетей необходимо загрузить в обучающую и валидационную выборки тысячи и сотни изображений. К сожалению, если эти изображения загружать непосредственно из вашего Google Drive, это занимает неприлично долгое время — десятки минут или даже часы. Ведь каждое обращение за файлом в Google Drive и получение от него ответа с содержимым файла происходит последовательно и не быстро.
Обидно тратить время доступа к бесплатной видеокарте на загрузку данных, да и не разумно это.
А мы люди разумные, поэтому мы один раз обратимся к Google Drive считаем наши данные запакованные заранее в zip архив, распакуем полученный zip архив в память Google Colab и считаем свои данные со скоростью в сотни раз большей чем с Google Drive последовательно по одному файлу.
Для эксперимента со скорость загрузки данных в Colab я взял имеющуюся у меня базу «Airplanes» для сегментационной нейросети.
В этой базе есть папка с изображениями «самолеты» и папка «сегментация», где хранятся маски изображений самолетов из вышеназванной папки.
В каждой папке по 1005 изображений 1920*1080.
В общей сложности нам предстоит загрузить 2010 файлов.
Я заранее загрузил к себе на Google Drive как саму базу с изображениями, так и ее zip архив.
Структура Обучающей Базы:

Итак, приступим к скоростной загрузке данных с Google Drive:
-
Запускаем Google Colab и импортируем необходимые нам для этого библиотеки и модули

Выполняем команду на подключение к Google Drive

Переходим по ссылке для выбора свое аккаунта Google

Выбираем свой аккаунт в Google

Подтверждаем доступ Colab к Google Drive

Копируем авторизационный код для доступа к Google Drive

Вставляем авторизационный код в строку и получаем доступ к своему Google Drive

Прописываем путь к архиву с обучающей базой данных и разархивируем ее память Colab

Для тестирования скорости чтения файлов я написал функцию, которая пройдется по всем подкаталогам обучающей базы и в каждом подкаталоге прочитает все файлы которые в нем хранятся.
Тестируем скорость чтения всех файлов

Как видно, время за которое мы загрузили 2010 файлов c размером изображения 1920*1080 составило всего 0,96 сек.
То есть, менее чем за секунду, мы загрузили весь наш объем информации.

Как мы видим для загрузки из каталога 2010 файлов хранящихся на Google Drive нам потребовалось уже 1500 секунд, а ведь это 25 минут.
Это 25 минут простоя вашего экспериментов с нейросетью.
Надеюсь, статья была для вас полезной и теперь загрузка большого количества файлов с Google Drive в Colab больше уже не проблема.
Загружайте свои обучающие данные в сотни раз быстрее чем делали до этого ранее.
Всего четыре простых шага.
- Запаковать Обучающую Базу в zip архив.
- Загрузить zip файл с Обучающей Базой к себе на Google Drive
- Распаковать zip файл с Обучающей базой в память Colab
- Прочитать все файлы памяти Colab в вашу программу
Для тех, кому нужен код, описанный в статье, добро пожаловать ко мне на GitHub.