Ошибка памяти: обучение большого набора данных

ошибка памяти

Мой набор данных имеет 70 тыс. Изображений, которые я хочу пройти через Conv2D но это выдает ошибку памяти, когда я пытался загрузить набор данных. У меня просто 4 ГБ ОЗУ, как я могу решить эту проблему через HDF5 матрица путем создания набора данных в HDF5? а затем загрузить его на тренировку, я думаю, это займет меньше памяти. Я попытался какое-то руководство по созданию набора данных HDF5, но этот процесс происходит после того, где происходит ошибка. Что я делаю не так? Пожалуйста, спросите, если вопрос не ясен.

datagen=ImageDataGenerator(rotation_range=40,
                            width_shift_range=0.2,
                            height_shift_range=0.2,
                          rescale=1./255,
                          shear_range=0.2,
                          zoom_range=0.2,
                          horizontal_flip=True)

batch_size=28
num_classes=37
epochs=100

os.chdir("E:");
path="Dataset/One";
classes=os.listdir(path)
x=[]#Datapoints 
y=[]#labels 
for fol in classes:
    imgfiles=os.listdir(path+u'\\'+fol);
    for img in imgfiles:
        im=Image.open(path+u'\\'+fol+u'\\'+img);
        im=numpy.asarray(im)/255;
        x.append(im)
        y.append(fol)
x=numpy.array(x)
y=numpy.array(y)
#memory error####################################################
x=x.reshape((-1,100,100,1))

n=x.shape[0]
randomize=numpy.arange(n)
numpy.random.shuffle(randomize)
randomize
x=x[randomize]
y=y[randomize]

3 ответа

Решение

Ваша проблема в том, что вы пытаетесь загрузить все данные одновременно, а это намного больше, чем ваша RAM. Вам нужно загрузить только одну партию и обработать ее, затем отбросить эту партию и двигаться дальше. Естественный способ сделать это может быть внутри for fol in classes петля - относись к каждому fol значение как одна партия, и подходят по одной партии за раз.

Если вам не нужен доступ или обработка всех данных сразу, вы можете загрузить их в chunks,

Если это CSV-файл и если вы можете использовать pandas тогда, возможно, вы можете сделать это так:

import pandas as pd
for chunk in pd.read_csv('dataset/movies.csv', chunksize=1000):
    # use this chunk for processing and/or training

Надеюсь, поможет!

не обучайте весь набор данных вместе, обучайте только несколько образцов в соответствии с требованиями к памяти. Я экспериментировал с большим набором данных и обучал только несколько образцов за раз.

      train_data = train_data.sample(n=200, random_state=12).copy()
train_data = train_data.reset_index(drop=True) 

в зависимости от требований вы можете изменить n (количество выборок) и случайные состояния. случайные состояния, используемые для установки начального числа для генератора случайных чисел. Это гарантирует, что набор данных отбирается воспроизводимым образом.

Другие вопросы по тегам