在Pytorch的一个循环中使用两个数据迭代器

时间:2020-05-19 05:29:56

标签: pytorch

我想问一个关于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 的批处理之后循环结束,那么在下一个时代,属于两个数据迭代器的数据是否又被重新整理?

1 个答案:

答案 0 :(得分:0)

1)循环何时结束?当循环看到属于 data_iterator2 的所有批处理时结束还是结束,直到看到属于 data_iterator1 的所有批处理为止?

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

2)如果在看到下一个属于 data_iterator2 的所有批处理之后循环结束,那么在下一个时期,属于两个数据迭代器的数据是否又被重新整理?

是的,两者都被重新改组了,因为改组是在创建迭代器时发生的,这是由zip()函数完成的,假设data_iterator1data_iterator2是实际的{{ 1}}对象,而不是从它们创建的迭代器。否则,每当您手动创建迭代器时(例如, DataLoader

相关问题