pytorch - 是否可以使用 PyTorch 的 DataLoader 反向 drop_last?
问题描述
我目前正在尝试制作自定义 PyTorch DataLoader。
我知道drop_last=True
第一次声明 DataLoader 对象时的设置会告诉对象在大小不合适的情况下删除最后一个不完整的批次。但是,我想知道这是否可以反过来完成,DataLoader 从后面计算批次数和计数。
我问这个的原因是因为我当前使用的数据是时间序列数据,我想使用最新的样本,因此如果从最旧的部分删除“剩余”样本将是理想的数据。
我已经想到了一些方法,比如先反转数据,然后创建 DataLoader 对象并将其反转回原来的样子,或者首先反转数据并创建对象,然后idx
以相反的顺序输入running __getitem__
,但这似乎很麻烦并且容易出错,所以我想知道 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
。
推荐阅读
- java - 与 Avro 模式的向后和向前兼容性
- c# - 使用任务和 task.delay 时 HttpListener 阻塞
- javascript - 使用 Select2 + Jquery 隐藏另一个 html 组件
- flutter - 从 Flutter 中的 SlideTransition 中删除白色背景
- macos - 如何像 Figma 一样自定义 Electron 红绿灯?
- nginx - 如何正确处理具有动态结尾的 Nginx 路由?
- reactjs - 如何从表中删除数据?
- python - 无法使用长 yticklabel 保存整个条形图
- visual-studio-code - 在 Linux 上配置 VS Code (tasks.json) 为 .c 文件调用 gcc,为 .cpp 调用 g++(默认)
- ruby-on-rails - 在 Mac 上安装 Ruby 2.7.2 时出现问题