PyTorch的DataLoader是否可以drop_last相反?

时间:2019-11-14 01:19:36

标签: pytorch dataloader

我目前正在尝试制作自定义PyTorch DataLoader。

我知道,在首次声明DataLoader对象时设置drop_last=True会告诉该对象,如果大小不合适,则删除最后一个不完整的批处理。但是,我想知道这是否可以反向完成,DataLoader在那里从背面计算批次数和计数。

之所以这样问,是因为我当前使用的数据是时间序列数据,并且我想使用最新的样本,因此,如果将“剩余”样本从数据的最旧部分。

我已经想到过一些方法,例如,首先反转数据,然后创建DataLoader对象,然后将其反转回原来的状态,或者首先反转数据并创建对象,然后输入{{1 }}在运行idx时顺序相反,但这似乎很麻烦并且容易出错,所以我想知道PyTorch是否提供这种行为。

谢谢。

1 个答案:

答案 0 :(得分:0)

计算将要删除的样本数量相对简单。一旦有了该数字,就可以使用torch.utils.data.Subset从一开始就截断数据。例如

batch_size = ... # your batch size
dataset = ... # your dataset

# compute number of samples to remove
dropped_samples = len(dataset) - batch_size * int(len(dataset) // batch_size)

subset_dataset = torch.utils.data.Subset(dataset, range(dropped_samples, len(dataset)))
loader = torch.utils.data.DataLoader(subset_dataset, ...

在这种情况下,设置drop_last=True无效,因为len(subset_dataset)batch_size整除。