pytorch 中的Dataset這個類為什麼可以呼叫 getitem ?

時間 2021-05-11 15:24:59

1樓:王小山

在DataLoder的iter中,會觸發子類Dataset中的getiterm函式讀取資料,並拼接成乙個batch返回,作為模型真正的輸入

2樓:

操作符過載:

如果乙個類定義了名為__getitem__()的方法,x為該類的乙個例項:

x[i]可是為x.__getitem__(x,i)

3樓:Goodbye響

我覺得題主你想問的應該是為什麼__getitem()__具有這種特殊的作用,那題主應該要知道這種前後帶雙下斜槓"__"的方法是類的專有方法,與一般的方法不同,我這裡引用python官方文件的解釋:

乙個類可以通過定義具有特殊名稱的方法來實現由特殊語法所引發的特定操作 (例如算術運算或下標與切片)。這是 Python 實現 操作符過載 的方式,允許每個類自行定義基於操作符的特定行為。例如,如果乙個類定義了名為 __getitem__()

的方法,並且 x 為該類的乙個例項,則 x[i] 基本就等同於 x.__getitem__(x,

i)。除此之外還有__len_()專有方法,則len(x)就等同於x.__len__(x);

add__()專有方法,則x+other就等同於x.__add__(x,other)

還有很多其他專有方法:詳情請參考:

4樓:

這是 python 自身的 data model,跟 pytorch 沒有關係。簡單的說,這些 magic methods 你只要實現之後,你就可以使用 python 的這些 syntax sugar。比如實現 __add__ 你就可以使用加法符號運算你的類,實現 __len__ 就可以用 len 函式取得你內部的資料長度等等。

這些都是 Python interpretor 幫你做的。

5樓:風息的累

遇到了不錯的解釋,不可能這個物件繼承了object父類裡面的__getitem__,可能是在編譯階段類似於alias的過程:

於是乎:

pytorch中,相同的batchsize,多GPU會比單GPU快多少?雙路能是單路的兩倍嗎?

張懷文 相同的batchsize,多gpu會不會比單卡快都是個問題。我遇到過多卡時候,每個卡頻率撞牆的問題,甚至比單卡慢。就是快的時候,也不會有N張卡,提速N倍的能力。多卡並行相關程式的開銷 多卡策略的開銷都不小。 勒布朗詹姆斯哈登 不會,pytorch有很多計算都是只在第一塊卡上進行的。而且如果雙...

PyTorch 中,nn 與 nn functional 有什麼區別?

老實人 上面使用者有糖吃可好 講的已經挺好了,我再插兩句 在建圖過程中,往往有兩種層,一種含引數 有Variable,如全連線層,卷積層 Batch Normlization層等 另一種不含引數 無Variable,如Pooling層,Relu層,損失函式層等。閱讀原始碼發現 nn.裡面的是繼承自n...

pytorch 發現反向函式中的grad variables引數是什麼意思?

蕊寒香冷蝶難來 如果反向傳播的張量y是非標量的話,該項引數需要設定乙個與y的shape相同的初值,一般可以直接設定為y.backward torch.ones y.shape 其實如果再令z y.sum 再直接用z.backward 也是一樣的效果。 學到這裡我也很疑惑,於是剛寫了一篇文章 PyTo...