[問題] PyTorch反向傳播失敗

看板DataScience作者時間2年前 (2022/05/13 23:52), 2年前編輯推噓2(2015)
留言17則, 4人參與, 2年前最新討論串1/1
作業系統:win10(ex:mac,win10,win8,win7,linux,etc...) 問題類別:RL(ex:ML,SVM,RL,DL,RNN,CNN,NLP,BD,Vis,etc...) 使用工具:PyTorch 1.10.0(ex:python,Java,C++,tensorflow,keras,MATLAB,etc...) 問題內容: 小弟的碩論要訓練一個MADDPG的模型 但是怎麼訓練效果都沒起來 直到現在才發現原來是反向傳播失敗了 我的actor根本沒有更新 發現問題後改了一下code卻報錯 是之前一直都沒有解決的inplace operation error 當時我在訓練的函式中 把actor的輸出detach()掉 程式便可運行,但我沒發現actor根本就沒計算到backward T^T 我有發一篇文在PyTorch Forum,詳情可以點進去連結看看 https://reurl.cc/p16bKb 真的很希望有好心人能幫我看看哪裡出了問題 現在都5月中了才發現這個bug...QQ 如果還是有任何不清楚的地方也歡迎站內信給我 我也願意付出一定的酬勞 再麻煩各位前輩不吝指教了,小弟感激不盡!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.170.132 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1652457140.A.872.html

05/14 00:08, 2年前 , 1F
我記得原論文有提供程式碼,他的agent用物件封裝放在list
05/14 00:08, 1F

05/14 00:08, 2年前 , 2F
中,請問你是改那一份code嗎?
05/14 00:08, 2F

05/14 00:13, 2年前 , 3F
好 看起來不是 xd
05/14 00:13, 3F
我是根據這部影片改的 https://youtu.be/tZTQ6S9PfkE
※ 編輯: chhuang17 (118.166.170.132 臺灣), 05/14/2022 01:27:19 ※ 編輯: chhuang17 (114.136.231.155 臺灣), 05/14/2022 01:47:17

05/14 15:31, 2年前 , 4F
detach 的意思就是不計算梯度
05/14 15:31, 4F
對啊,不過我後來改成DDPG的架構跑 反向傳播又可行了 實在是很納悶為何MADDPG不行QQ ※ 編輯: chhuang17 (114.136.231.155 臺灣), 05/15/2022 02:23:37

05/15 09:24, 2年前 , 5F
是不是你bn1重複跑很多次forward 的關係?你拆成不
05/15 09:24, 5F

05/15 09:24, 2年前 , 6F
同的normalizing layer 試試
05/15 09:24, 6F

05/15 15:56, 2年前 , 7F
in-place error....good luck!
05/15 15:56, 7F
這句真的超哭

05/15 20:27, 2年前 , 8F
我拿了你的actor簡單跑了個forward backward 沒有遇
05/15 20:27, 8F

05/15 20:27, 2年前 , 9F
到問題 可能不是出在這 建議把所有的error 都貼出來
05/15 20:27, 9F
已解決 後來找到強者幫我debug,似乎是pytorch語法的問題 解法是把所有agent的actor做完backward之後 再一起做optimizer.step() (但critic的部分不需要這樣改…就不知道為什麼了@@) ※ 編輯: chhuang17 (223.137.234.138 臺灣), 05/16/2022 07:29:01

05/16 08:32, 2年前 , 10F
optimizer.step()的確會有inplace op 當作學經驗吧
05/16 08:32, 10F

05/16 13:34, 2年前 , 11F
我簡單看了你的learn() 的確兩個loss能直接合在一起
05/16 13:34, 11F

05/16 13:34, 2年前 , 12F
做backward 不太理解你拆開然後又retain_graph的用意
05/16 13:34, 12F

05/16 13:35, 2年前 , 13F
另外還是建議你用個high level的package做refactor
05/16 13:35, 13F

05/16 13:35, 2年前 , 14F
pytorch-lightning或ignite都好
05/16 13:35, 14F

05/16 13:35, 2年前 , 15F
不然目前這個code髒髒的不好debug
05/16 13:35, 15F

05/16 13:36, 2年前 , 16F
有看到直接assign optimizer給nn.Module的
05/16 13:36, 16F

05/16 13:36, 2年前 , 17F
你這次問題出在optimizer.step()就會不好debug
05/16 13:36, 17F
感謝yoyo大的熱心回覆! 我對PyTorch還不到非常上手 之後等論文告一段落後我再來好好研究一下 ※ 編輯: chhuang17 (223.137.234.138 臺灣), 05/16/2022 15:09:06
文章代碼(AID): #1YVdwqXo (DataScience)
文章代碼(AID): #1YVdwqXo (DataScience)