не хватает оперативной памяти в Google colab при импорте набора данных в массив

#python #conv-neural-network #google-colaboratory

Вопрос:

Я хочу сохранить около 2400 изображений размера 2000**2000*3 в массиве для питания сверточной нейронной сети. но сеанс Google Colab продолжает сбоить из-за нехватки оперативной памяти.

Мой код для импорта набора данных изображений:

 Train_data = []
for img in sorted(glob.glob("path/*.jpg")):
    image= mpimg.imread(img)
    image=np.array(image , dtype='float32') 
    image /= 255.
    Train_data.append(image) 
Train_data = np.array(Train_data)
 

Комментарии:

1. Попробуйте использовать генератор.

Ответ №1:

Есть два возможных способа избежать ошибки оперативной памяти:

Первый вариант: Измените размер изображений на меньший размер

 import cv2

Train_data = []
for img in sorted(glob.glob("path/*.jpg")):
    image= mpimg.imread(img)
    image=np.array(image , dtype='float32') 
    image = cv2.resize(image, (150,150))
    image /= 255.
    Train_data.append(image) 
Train_data = np.array(Train_data)
 

Второй вариант: вы можете использовать генераторы, которые потребляют меньше памяти, чем итераторы, так как они не хранят весь список.

 Train_data = []

def gen_images():
    for img in sorted(glob.glob("path/*.jpg")):
        image= mpimg.imread(img)
        image=np.array(image , dtype='float32') 
        image /= 255.
        yield image

for image in gen_images():
    Train_data.append(image)
 

Ответ №2:

Большое спасибо за ваш замечательный ответ. Я пробую генератор, и все в порядке. Однако, когда я пытаюсь выполнить код ниже, я не сталкиваюсь с сбоем:

 Train_data =np.empty(shape=(num,m,n,c), dtype=np.float32)
i=0
for img in sorted(glob.glob("path/*.jpg")):
 image= mpimg.imread(img)
 image=np.array(image , dtype='float32') 
 image /= 255.
 Train_data[i,:,:,:] = image  
 i =1
 

может ли кто-нибудь сравнить этот код с моим первым кодом, в котором используется добавление, с точки зрения сложности пространства?