我目前正在尝试使用PyTorch的DataLoader来处理数据,并将其输入到我的深度学习模型中,但是遇到了一些困难。在
我需要的数据的形状是(minibatch_size=32, rows=100, columns=41)
。在我编写的自定义dataset
类中的__getitem__
coad如下所示:
def __getitem__(self, idx):
x = np.array(self.train.iloc[idx:100, :])
return x
我这样写的原因是因为我希望数据加载器一次处理形状(100, 41)
的输入实例,我们有32个这样的单个实例。在
但是,我注意到,与我最初的想法相反,DataLoader传递给函数的idx
参数不是连续的(这一点很重要,因为我的数据是时间序列数据)。例如,打印值给了我这样的结果:
这是正常行为吗?我发布这个问题是因为返回的数据批不是我最初想要的。在
在使用DataLoader之前,我用于预处理数据的原始逻辑是:
txt
或csv
文件中读取数据。在(100, 41)
,其中32个是一个小批量,因此我们通常会得到大约100个批次,并相应地对数据进行整形。在(32, 100, 41)
。在我不确定我应该如何处理DataLoader钩子方法。如有任何提示或建议,我们将不胜感激。提前谢谢。在
定义idx的是},如您所见{a1}(开源项目是您的朋友)。在这个code(和comment/docstring)中,您可以看到}之间的区别。如果您查看here,您将看到如何选择索引:
sampler
或{sampler
和{请注意这是
^{pr2}$_SingleProcessDataLoaderIter
实现;您可以找到_MultiProcessingDataLoaderIter
here(ofc,使用哪个取决于num_workers
值,如您所见here)。回到采样器,假设您的数据集不是_DatasetKind.Iterable
,并且您没有提供自定义采样器,这意味着您正在使用(dataloader.py#L212-L215):让我们看看how the default BatchSampler builds a batch:
非常简单:它从取样器获取索引,直到达到所需的批次大小。在
现在的问题是“在PyTorch的DataLoader中,getitem的idx是如何工作的?”可以通过查看每个默认采样器的工作方式来回答。在
__iter__
实现):因此,由于您没有提供任何代码,我们只能假设:
shuffle=True
或_DatasetKind.Iterable
相关问题 更多 >
编程相关推荐