torch.utils.data.DataLoader對象中的迭代操作


關於迭代器等概念參考:https://www.cnblogs.com/zf-blog/p/10613533.html

關於pytorch中的DataLoader類參考:https://blog.csdn.net/u014380165/article/details/79058479(寫的蠻好)

現在用一個例子來講解一下:

(1)法一:

a = torch.utils.data.DataLoader(....)

a = enumerate(a) #enumerate的built-in函數:__iter__()會將a變成iterator,后面可以再調用built-in函數:__next__()進行迭代;

m = a.__next__()  #注意這里使用的是enumerate類型的built-in函數:__next__()

(2)法二:

a = torch.utils.data.DataLoader(...)

a = torch.utils.data.DataLoader.__iter__(a) #這里調用DataLoader的built-in函數:__iter__()將a變成iterator;

m = a.__next__() #注意:這里調用的是DataLoader的built-in函數:__next__()

PS:

(1)上述兩種__next__()得到的封裝結構是不同的,這個在拆解a時要注意;

(2)將容器(各種數據結構:list、tuple等)變成iterator時需要使用iter(),而對於類操作時需要在類中定義__init__()和__next__(),注意這點區別;(具體可參考:https://blog.csdn.net/admin_maxin/article/details/82052065 , 這樣也說明了為什么不能用a = iter() , m=a.next()這種做法,因為a是一個類了,需要用built-in函數__iter__將其變成iterator,再用__next__(),否則會報“enumarate” object has no attribute "next"的錯誤 or "DataLoader" object has no attribute "next")


免責聲明!

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



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