對於少量的有監督數據集和大量的無監督數據集,只用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