我想问一个关于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 的批处理之后循环结束,那么在下一个时代,属于两个数据迭代器的数据是否又被重新整理?
答案 0 :(得分:0)
1)循环何时结束?当循环看到属于 data_iterator2 的所有批处理时结束还是结束,直到看到属于 data_iterator1 的所有批处理为止?
当最短的迭代器用尽时,Python的zip()
停止。 DataLoader
的行为与其他任何可迭代的行为一样。因此,您的循环将在看到所有批次的data_iterator2
之后结束。
2)如果在看到下一个属于 data_iterator2 的所有批处理之后循环结束,那么在下一个时期,属于两个数据迭代器的数据是否又被重新整理?
是的,两者都被重新改组了,因为改组是在创建迭代器时发生的,这是由zip()
函数完成的,假设data_iterator1
和data_iterator2
是实际的{{ 1}}对象,而不是从它们创建的迭代器。否则,每当您手动创建迭代器时(例如, DataLoader
。