首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pytorch深度学习顺序高效地加载数据

pytorch深度学习顺序高效地加载数据
EN

Stack Overflow用户
提问于 2021-03-08 08:11:58
回答 1查看 59关注 0票数 1

我一直在对两万个“图像”进行神经网络分析,每个图像以100 * 100 * 100个神经元的强度的形式表示。

代码语言:javascript
复制
x = np.loadtxt('imgfile')
x = x.reshape(-1, img_channels, 100, 100, 100)
//similarly for target variable 'y'

在上面,x的第一个维度将是图像的数量。我使用DataLoader在每次迭代期间获得适当数量的图像进行训练,如下所示。

代码语言:javascript
复制
batch_size = 16
traindataset = TensorDataset(Tensor(x[:-testdatasize]), Tensor(y[:-testdatasize]) )
train_loader = DataLoader(dataset=traindataset, batch_size=batch_size, shuffle=True)

for epoch in range(num_epochs):
    for i, (data,targets) in enumerate(train_loader):   
        ... 

我希望将图像的数量增加到50k,但受到计算机内存(imgfile为~50 GB)的限制。

我想知道是否有一种有效的方法来处理所有的数据?例如,与加载整个the文件不同,我们可以首先将它们划分为多个集合,每个集合具有batch_size个数的图像,并在训练期间定期加载这些集合。我不完全确定如何实现这一点。

我在这里找到了一些使用Keras的类似想法:https://machinelearningmastery.com/how-to-load-large-datasets-from-directories-for-deep-learning-with-keras/

请告诉我用pytorch实现的任何类似的想法,或者你有任何想法。

EN

回答 1

Stack Overflow用户

发布于 2021-03-18 08:04:41

在发布这个问题后挖掘了一段时间,发现当然有一种使用torch.utils.data.Dataset的方法。每个图像数据可以保存在一个单独的文件中,所有的文件名列在'filelistdata‘中。当使用DataLoader调用时,只有batch_size数量的图像会被加载到内存中(在后台,getitem方法将获取图像)。下面的方法对我很有效:

代码语言:javascript
复制
traindataset = CustDataset(filename='filelistdata', root_dir=root_dir)

train_loader = DataLoader(dataset=traindataset, batch_size=batch_size, num_workers = 16)

num_workers对于性能非常重要,并且应该高于您正在使用的Cpus数量(我在上面使用了4个cpus )。我发现以下资源对回答这个问题很有用。

How to split and load huge dataset that doesn't fit into memory into pytorch Dataloader?

https://stanford.edu/~shervine/blog/pytorch-how-to-generate-data-parallel

https://www.youtube.com/watch?v=ZoZHd0Zm3RY

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66522854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档