对于少量的有监督数据集和大量的无监督数据集,只用zip的话,那么取完有监督数据集后剩下的无监督数据集就浪费了,这个时候可以使用python内置的itertools,将其中的小部分变成循环采样:
from itertools import cycle
for idx, (sup_data, un_data) in enumerate(zip(cycle(sup_dataloader), unsup_dataloader)):
(imgs, labels) = sup_data[0].to(device), sup_data[1].to(device)
(uimgs, ulabels) = un_data[0].to(device), None