【发布时间】:2020-03-09 02:05:32
【问题描述】:
我目前正在尝试使用 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 个构成一个 minibatch,因此我们通常最终会得到大约 100 个左右的批次,并相应地重塑数据。 - 一个输入的形状为
(32, 100, 41)。
我不确定我应该如何处理 DataLoader 挂钩方法。非常感谢任何提示或建议。提前致谢。
【问题讨论】:
-
你能详细说明你的
2吗? “我们通常最终得到大约 100 个”你的意思是你的数据集有 32*100 样本吗? -
嗨。不,我的意思是模型的一个输入是
(100, 40)的形状,其中有 32 个形成一个小批量。 -
@Seankala 我试图引导您完成 DataLoader 代码。让我知道这是否有帮助。
-
@Berriel 是的,它帮助很大。非常感谢您花时间和精力进行详细解释!
标签: python pytorch dataloader