pytorch,兩個網路聯合訓練,怎麼設計兩個損失分別對兩個網路進行反向傳播?

時間 2021-05-06 09:54:30

1樓:xaipxan

我猜你的意思應該是net1 net2兩個網路,如何同時反向傳播是吧。

對於這個問題,我自己做過簡陋的實驗。x=

torch

.rand(2

,3)net1=nn

.Linear(3

,3)net2=nn

.Linear(3

,3)a

=net1(x

)b=net2(a

)tgt

=torch

.rand(2

,3)loss_fun

=torch.nn

.MSELoss

()opt1

=torch

.optim

.Adam

(net1

.parameters

(),0.002

)opt2

=torch

.optim

.Adam

(net2

.parameters

(),0.002

)foriin

range

(100

):tmp

=net1(x

)output

=net2

(tmp

)loss

=loss_fun

(output

,tgt

)net1

.zero_grad

()net2

.zero_grad

()loss

.backward

()opt1

.step

()opt2

.step

()print

('EPOCH:

{},loss={}'

.format(i

,loss

))aa

=net1(x

)bb=net2(aa

)print(a

)print(aa

)print(b

)print(bb

)先建立兩個網路net1和net2,把net1的輸出再輸入net2 。

目的是用訓練之前的net1輸出a 和 net2輸出b對比訓練後的net1輸出aa和net2輸出bb。

訓練中是net1用opt1(adam)優化,net2用opt2(adam)優化。

結果是a和aa,b和bb都不一樣。說明權重得到了訓練或者說發生了改變。

之後再用乙個net把net1和net2封裝進去。

xx = torch.rand(2, 3)

class net(nn.Module):

def __init__(selfsuper().__initself.n1 = nn.Linear(3, 3self.n2 = nn.Linear(3, 3)

def forward(self, xxoutput = self.n1(xxprint(outputoutput = self.n2(outputreturn output

n = net()

tgt = torch.rand(2, 3)

loss_fun = torch.nn.MSELoss()

opt_n = torch.optim.Adam(n.parameters(), 0.002)

for i in range(100):

outout = n(xx)

loss = loss_fun(outout, tgt)

n.zero_grad()

loss.backward()

opt_n.step()

print('EPOCH:{},loss={}'.format(i, loss))

目的跟之前的一樣。

在net的forward的部分螢幕列印出net1的輸出,方便觀察每次輸出的矩陣跟之前的一樣否。

跟之前的不同的是這次只需要優化net乙個的就可以了。

分割線就像encoder-decoder網路一樣,有些人是各自寫完class encoder和class decoder後把他們裝進class net中。這樣只需要優化net的引數即可。

有些人喜歡用兩個opt各自優化encoder和decoder的引數。

效果一樣。

pytorch怎麼同時讓兩個dataloader打亂的順序是相同的?

氕氘氚氘化鋰氫 本人用過的粗暴方案。使用numpy先對資料集進行隨機化,然後再使用torch shuffle False載入資料集。缺點就是每次epoch的資料都是一樣的。 Wet sand 既然都一起拿出 dataloader 的,何不寫進同個 dataset,套同個 dataloader,get...

兩個月訓練能進校隊嗎

何嘉俊 我覺得是可以的,當然你得刻苦訓練,習得更多的技術,能穩定的得分。你這身材真好呀,感覺內線會被你搞的翻山覆水。比賽越來越多,打的越多,我想你能發揮的更好。加油吧,少年。 DeathRiderL 總結了一下,目前高三,想進大學打校隊,基本規則能摸清,但是在學校起步較晚,學校也不重視,身體素質方面...

兩個月的拉布拉多怎樣訓練?

貓狗賣的小哥哥 二個月的拉布拉多講真的,有點類似於小孩子一二歲,你教太多他也不懂,一般狗狗的教育年齡在6個月左右,現在你最好有點耐心過了這段時間。 我沒有拖拖拖延症 小狗長牙階段,它咬你的手痛了你就大聲慘叫,並說no,然後用狗的下嘴唇包裹住它的牙慢慢加重力度,等到它感覺不舒服的時候放開,時間長了,它...