内存错误:训练大型数据集



内存错误

我的数据集有 70k 张图像,我想通过Conv2D进行训练,但当我尝试加载数据集时,它抛出内存错误。我只有 4GB RAM,如何通过在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]

您的问题是您尝试一次加载所有数据,并且它比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(样本数(和随机状态。用于为随机数生成器设置种子的随机状态。它确保以可重现的方式对数据集进行采样。

相关内容

  • 没有找到相关文章

最新更新