【发布时间】:2018-08-13 16:28:42
【问题描述】:
我有一个 pytorch ImageFolder。我看到ImageFolder的__getitem__(index)方法可以同时获取张量和索引的类。但是,如果我想使用 ImageFolder 从我选择的一个类(或多个类)中随机抽取一定数量的图像,然后稍后为 __getitem__ 方法获取它们的索引,该怎么办? (有点像反向操作,即选择类 -> 获取索引而不是选择索引 -> 获取类)
如何做到这一点?
【问题讨论】:
我有一个 pytorch ImageFolder。我看到ImageFolder的__getitem__(index)方法可以同时获取张量和索引的类。但是,如果我想使用 ImageFolder 从我选择的一个类(或多个类)中随机抽取一定数量的图像,然后稍后为 __getitem__ 方法获取它们的索引,该怎么办? (有点像反向操作,即选择类 -> 获取索引而不是选择索引 -> 获取类)
如何做到这一点?
【问题讨论】:
我曾经为 MNIST 数据集尝试过类似的方法,但遗憾的是找不到对应的代码。如果我没记错的话,我只是简单地迭代了数据集的自定义拆分,但现在有一种更原生的方式来做到这一点:
本质上,不必担心您的Dataset 课程,而是您的DataLoader 的问题。 Dataset 仅包含引用此数据的方法;但是,实际调用此数据的点发生在 DataLoader 中。
不幸的是,您必须编写自己的DataLoader,这样您就可以拥有额外的自定义samplers that only take a specific range。我最好的猜测是有一个需要多个采样器(每个类一个),您在其中传递每个类的相应索引,并在运行时询问与特定类对应的采样器。
AFAIK,定期提供的DataLoaders 不可能有这样的东西。
另请注意,要跟踪您何时通过所有训练数据一次变得越来越困难(如果您仍想在一个时期内对所有不同样本进行训练)。
【讨论】: