【问题标题】:Using Two Data Iterators Under One Loop in Pytorch在 Pytorch 的一个循环下使用两个数据迭代器
【发布时间】:2020-05-19 17:37:27
【问题描述】:

我想问一个关于 Pytorch 中的数据迭代器的问题。

我有两个数据集,并希望为每个数据集使用不同的数据迭代器来训练一个模型。

为此,我为它们中的每一个都使用了 DataLoader 来获取数据迭代器,并将 shuffle 参数设置为 True。

然后,我在一个循环下使用它们,对于每个时代:

for idx, datum in enumerate(zip(data_iterator1, data_iterator2)):

这里,data_iterator1 的长度大约是 data_iterator2 的长度的 28 倍。

这里我有以下几个问题:

1) 循环何时结束?是在循环看到所有属于 data_iterator2 的批次时结束,还是在看到所有属于 data_iterator1 的批次之前结束?

2) 如果在看到所有属于 data_iterator2 的批次后循环结束,那么在下一个 epoch,属于两个数据迭代器的数据是否再次洗牌?

【问题讨论】:

    标签: pytorch


    【解决方案1】:

    1) 循环何时结束?是在循环看到所有属于 data_iterator2 的批次时结束,还是在看到所有属于 data_iterator1 的批次之前结束?

    当最短的迭代器用尽时,Python 的 zip() 停止。 DataLoader 的行为与任何其他可迭代对象一样。因此,您的循环将在看到所有批次的data_iterator2 后结束。

    2) 如果在看到所有属于 data_iterator2 的批次后循环结束,那么在下一个 epoch,属于两个数据迭代器的数据是否再次洗牌?

    是的,两者都再次洗牌,因为洗牌发生在迭代器创建时,这是由zip()函数完成的,假设data_iterator1data_iterator2是实际的DataLoader对象而不是迭代器是由他们创造的。否则,每当您手动创建迭代器时,它都会被打乱,例如data_iterator1 = iter(data_loader1).

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 2015-08-27
      • 1970-01-01
      • 2016-05-08
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      相关资源
      最近更新 更多