【发布时间】:2019-07-13 08:40:48
【问题描述】:
我目前正在训练一个 3D CNN,用于具有相对稀疏标签的二进制分类(标签数据中约 1% 的体素对应于目标类)。
为了在训练期间执行基本的健全性检查(例如,网络是否完全学习?)向网络展示一小部分精心挑选的训练示例子集,其中目标类标签的比例高于平均水平,这会很方便.
按照 Pytorch 文档的建议,我实现了自己的 dataset 类(继承自 torch.utils.data.Dataset),它通过 __get_item__ 方法向 torch.utils.data.DataLoader 提供训练示例。
在我找到的pytorch tutorials 中,DataLoader 用作迭代器来生成训练循环,如下所示:
for i, data in enumerate(self.dataloader):
# Get training data
inputs, labels = data
# Train the network
# [...]
我现在想知道的是是否存在一种简单的方法来加载单个或几个特定的训练示例(使用 Dataset 的 __get_item__ 方法理解的线性索引)。但是,DataLoader 没有 __get_item__ 方法并反复调用 __next__ 直到我达到所需的索引似乎并不优雅。
显然,解决此问题的一种可能方法是定义一个自定义 sampler 或 batch_sampler,继承自抽象 torch.utils.data.Sampler。但这似乎在顶部检索一些特定的样本。
我想我在这里忽略了一些非常简单和明显的东西。任何建议表示赞赏!
【问题讨论】:
标签: python machine-learning deep-learning pytorch