繁体   English   中英

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

[英]Memory Error : Training large dataset

记忆错误

我的数据集有70k张图像,我想通过Conv2D进行训练,但是当我尝试加载数据集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循环中的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

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM