内存错误
我的数据集有70k图像,我想通过Conv2D
训练但是当我试图加载数据集时它会引发内存错误。我只有4GB内存,如何通过在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]
答案 0 :(得分:4)
您的问题是您尝试一次加载所有数据,并且它比您的RAM大得多。您只需加载一个批次并对其进行处理,然后丢弃该批次并继续。一种自然的方法可能是在for fol in classes
循环内部 - 将每个fol
值视为一个批处理,并一次适合一个批处理。
答案 1 :(得分:0)
如果您不需要一次访问或处理所有数据,则可以在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
希望它有所帮助!