Pytorch中dataloader之enumerate與iter,tqdm


dataloader本質上是一個可迭代對象,使用iter()訪問,不能使用next()訪問;

使用iter(dataloader)返回的是一個迭代器,然后可以使用next訪問;

也可以使用for inputs,labels in enumerate(dataloader)形式訪問,但是enumerate和iter的區別是什么呢?暫時不明白。

補充:

如下代碼形式調用enumerate(dataloader'train')每次都會讀出一個batchsize的數據,可根據以下代碼做一個測試。下面代碼的前提是,數據集中總共包含245張圖像,dataloader'train'設置時drop_last=True,其中batch_size=32,經過以下代碼后輸出的count為224(正好等於32*7),而多出來的245-224=21張圖像不夠一個batch因此被drop掉了。換句話說,enumerate(dataloader'train')會把dataloader'train'中的數據一個batch一個batch地取出來用於訓練。也就是說,使用enumerate進行dataloader中的數據讀取用於神經網絡的訓練是第一種數據讀取方法,其基本形式即為for index, item in enumerate(dataloader'train'),其中item中0為數據,1為label.

count=0 for index, item in enumerate(dataloader['train']):  count+=len(item[1].numpy) print(count) 

第二種讀取dataloader中數據的方法是使用默認的iter函數,其基本樣式可參照以下代碼:

for epoch in range(opt.begin_epoch,opt.end_epoch):  iter=myDataLoader['train'].__iter__() #返回值iter是一個基本的迭代器  batchNum=len(myDataLoader['train']) #返回batch的數量,如上應該等於7   myNet.train() #使得我定義的網絡進入訓練模式   for i in range(0,batchNum):  batchData=iter.__next__() #讀取一個batch的數據,batchsize=32時實際對應32張圖像  img=batchData[0].to(opt.device) #opt.device=cuda,即轉移到GPU運行  ... 

還有一個tqdm后續補充!!!

tqdm是一個可以顯示進度條的模塊

from tqdm import tqdm for item in tqdm(range(100)):  # do something 

enumerate()函數是python的內置函數,可以同時遍歷lt中元素及其索引,i是索引,item是lt中的元素,如圖:

from tqdm import tqdm lt=['a','b','c'] for i, item in enumerate(lt):  print(i,item)  #輸出結果如下: 0 a 1 b 2 c 

tqdm和enumerate()結合

from tqdm import tqdm lt=['a','b','c'] for i,item in enumerate(tqdm(lt))  print(i,item) 

以上關於tqdm部分內容轉載自:https://blog.csdn.net/m0_37586991/article/details/89435193

 

原文鏈接:https://www.daimajiaoliu.com/daima/479d31ca3100408


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM