pytorch如何能夠保證模型的可重複性

2021-09-24 14:54:12 字數 835 閱讀 4645

問題背景是這樣的:

我用了自己定義了pytorch中的模型,並且,在main函式中設定了隨機種子用來保證模型初始化的引數是一致的,同時pytorch中的隨機種子也能夠影響dropout的作用,見鏈結

為了保證所有的引數都一樣,我在設定dataloader的時候,資料並沒有進行shuffle,這樣能夠在每乙個iteration的時候,沒有random的操作

但是,一旦我把模型放到gpu上執行之後,我把網路中間輸出的feature map儲存下來,進行比較,發現同乙個位置,兩次執行的feature的值竟然不一樣

難道是網路的初始化不一樣咩?在第乙個iteration執行的時候,還沒有更新引數的時候,我將網路的引數進行儲存成numpy,執行兩次,進行比較,發現兩次模型的引數都一樣!

so, 模型的引數都是一樣的,輸入的資料也是一樣的,難道我自己定義的網路層裡面有一些random的操作?我自己定義的網路層裡面有bn層,卷積以及轉置卷積層,一旦這裡面的超引數確定的話,實際上兩次執行的結果應該是absolutely一致的,so,問題出在**?

在pytorch forum上看到乙個類似的問題,說是在gpu上執行的結果和cpu執行的結果不一致,我試了一下,果然還真是這樣,把模型放到cpu上,兩次執行的結果absolutely一致。

但是仍然不理解,為什麼gpu上會有運算誤差,但是我也不能一直在cpu上執行模型吧,於是乎,在網上搜到這樣乙個類似的帖子,實際上pytorch forum上吐槽這個問題的人太多,當然解決的辦法也是很簡單

在主函式中加上一句

torch.backends.cudnn.deterministic = true

用以保證實驗的可重複性,果然,兩次執行的結果完全一致

ORACLE修改IP位址後如何能夠使用

oracle資料庫伺服器ip改變後,監聽程序無法啟動,需要修改相應的配置檔案 1 伺服器端 oracle home network admin listener.ora修改address的host即可。監聽程序負責監聽網路上發來請求,然後響應,修改後重新啟動listener。即 listener d...

測試人員如何能夠受到重視?

常常聽到有人抱怨說公司不重視測試,不重視測試人員。沒錯,這個在小公司是非常常見的現象。其實,即使工作在大公司,雖然測試和測試人員的地位得到了很大程度的提高,可是相對開發和pm的地位還是有一定的差距,也就是說測試在公司中的地位還是比較低的,這個其實是不爭的事實。道理也很簡單,測試人員的技術水平,測試工...

iOS 上的 VOIP 應用,如何能夠更省電?

好文推薦 近日在網上看到乙個文章,介紹 iphone android 上的熱門的 voip 應用 viber 曰 它可以完全執行在後台,且不會耗電,即便是不執行在後台,你照樣可以撥打免費 和發免費簡訊。應該說,這些說法從技術上看並不嚴謹。首先,從這段文字能得到乙個模糊的印象,乙個在後台執行的程式,並...