我目前正在尝试使用PyTorch的DataLoader来处理数据以喂给我的深度学习模型,但是遇到了一些困难。
我需要的数据形状为(minibatch_size=32, rows=100, columns=41)
。我编写的自定义Dataset
类中的__getitem__
代码大致如下:
def __getitem__(self, idx):
x = np.array(self.train.iloc[idx:100, :])
return x
我之所以这样写是因为我希望DataLoader每次处理形状为(100, 41)
的输入实例,并且我们有32个这样的单个实例。
然而,我注意到与我最初的想法相反,DataLoader传递给函数的idx
参数不是顺序的(这很关键,因为我的数据是时序数据)。例如,打印这些值会得到像这样的结果:
idx = 206000
idx = 113814
idx = 80597
idx = 3836
idx = 156187
idx = 54990
idx = 8694
idx = 190555
idx = 84418
idx = 161773
idx = 177725
idx = 178351
idx = 89217
idx = 11048
idx = 135994
idx = 15067
这是正常的行为吗?我发布这个问题是因为返回的数据批次不是我最初想要的。
在使用DataLoader之前,我使用的原始逻辑是:
- 从
txt
或csv
文件中读取数据。 - 计算数据中有多少批次,并相应地切片数据。例如,由于一个输入实例的形状为
(100, 41)
,其中32个实例组成一个小批量,我们通常会得到大约100个左右的批次,并相应地重塑数据。 - 一个输入的形状为
(32, 100, 41)
。
我不确定我应该如何处理DataLoader钩子方法。任何提示或建议都将不胜感激。提前致谢。
(100, 40)
,而有32个这样的输入组成一个小批量。 - Sean