是否可以使用 PyTorch 的 DataLoader 反向drop_last?



我目前正在尝试制作一个自定义PyTorch数据加载器。

我知道,在第一次声明DataLoader对象时设置drop_last=True会告诉对象,如果大小不合适,则丢弃最后一个不完整的批。然而,我想知道是否可以反过来做,DataLoader从后面计算批次数和计数。

我之所以这么问,是因为我目前使用的数据是时间序列数据,我想使用最新的样本,因此,如果从数据的最旧部分中删除"剩余"样本,那将是理想的选择。

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

提前谢谢。

计算将被删除的样本数量相对简单。一旦有了这个数字,就可以使用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整除。

相关内容

  • 没有找到相关文章

最新更新