亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁(yè) > 知識(shí)庫(kù) > Pytorch中的backward()多個(gè)loss函數(shù)用法

Pytorch中的backward()多個(gè)loss函數(shù)用法

熱門(mén)標(biāo)簽:地圖標(biāo)注線上如何操作 開(kāi)封自動(dòng)外呼系統(tǒng)怎么收費(fèi) 電銷(xiāo)機(jī)器人的風(fēng)險(xiǎn) 手機(jī)網(wǎng)頁(yè)嵌入地圖標(biāo)注位置 天津電話機(jī)器人公司 應(yīng)電話機(jī)器人打電話違法嗎 開(kāi)封語(yǔ)音外呼系統(tǒng)代理商 河北防封卡電銷(xiāo)卡 400電話辦理哪種

Pytorch的backward()函數(shù)

假若有多個(gè)loss函數(shù),如何進(jìn)行反向傳播和更新呢?

 x = torch.tensor(2.0, requires_grad=True)                                                    
 y = x**2                                                                                     
 z = x                                                                                        
# 反向傳播
 y.backward()                                                                                 
 x.grad                                                                                       
 tensor(4.)
 z.backward()                                                                                 
 x.grad                                                                                       
 tensor(5.) ## 累加

補(bǔ)充:Pytorch中torch.autograd ---backward函數(shù)的使用方法詳細(xì)解析,具體例子分析

backward函數(shù)

官方定義:

torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False, grad_variables=None)

Computes the sum of gradients of given tensors w.r.t. graph leaves.The graph is differentiated using the chain rule. If any of tensors are non-scalar (i.e. their data has more than one element) and require gradient, the function additionally requires specifying grad_tensors. It should be a sequence of matching length, that contains gradient of the differentiated function w.r.t. corresponding tensors (None is an acceptable value for all tensors that don't need gradient tensors). This function accumulates gradients in the leaves - you might need to zero them before calling it.

翻譯和解釋:

參數(shù)tensors如果是標(biāo)量,函數(shù)backward計(jì)算參數(shù)tensors對(duì)于給定圖葉子節(jié)點(diǎn)的梯度( graph leaves,即為設(shè)置requires_grad=True的變量)。

參數(shù)tensors如果不是標(biāo)量,需要另外指定參數(shù)grad_tensors,參數(shù)grad_tensors必須和參數(shù)tensors的長(zhǎng)度相同。在這一種情況下,backward實(shí)際上實(shí)現(xiàn)的是代價(jià)函數(shù)(loss = torch.sum(tensors*grad_tensors); 注:torch中向量*向量實(shí)際上是點(diǎn)積,因此tensors和grad_tensors的維度必須一致 )關(guān)于葉子節(jié)點(diǎn)的梯度計(jì)算,而不是參數(shù)tensors對(duì)于給定圖葉子節(jié)點(diǎn)的梯度。如果指定參數(shù)grad_tensors=torch.ones((size(tensors))),顯而易見(jiàn),代價(jià)函數(shù)關(guān)于葉子節(jié)點(diǎn)的梯度,也就等于參數(shù)tensors對(duì)于給定圖葉子節(jié)點(diǎn)的梯度。

每次backward之前,需要注意葉子梯度節(jié)點(diǎn)是否清零,如果沒(méi)有清零,第二次backward會(huì)累計(jì)上一次的梯度。

下面給出具體的例子:

import torch
x=torch.randn((3),dtype=torch.float32,requires_grad=True)
y = torch.randn((3),dtype=torch.float32,requires_grad=True)
z = torch.randn((3),dtype=torch.float32,requires_grad=True)
t = x + y
loss = t.dot(z)  #求向量的內(nèi)積

在調(diào)用 backward 之前,可以先手動(dòng)求一下導(dǎo)數(shù),應(yīng)該是:

用代碼實(shí)現(xiàn)求導(dǎo):

loss.backward(retain_graph=True)
print(z,x.grad,y.grad)  #預(yù)期打印出的結(jié)果都一樣
print(t,z.grad)    #預(yù)期打印出的結(jié)果都一樣
print(t.grad)    #在這個(gè)例子中,x,y,z就是葉子節(jié)點(diǎn),而t不是,t的導(dǎo)數(shù)在backward的過(guò)程中求出來(lái)回傳之后就會(huì)被釋放,因而預(yù)期結(jié)果是None

結(jié)果和預(yù)期一致:

tensor([-2.6752, 0.2306, -0.8356], requires_grad=True) tensor([-2.6752, 0.2306, -0.8356]) tensor([-2.6752, 0.2306, -0.8356])

tensor([-1.1916, -0.0156, 0.8952], grad_fn=AddBackward0>) tensor([-1.1916, -0.0156, 0.8952]) None

敲重點(diǎn):

注意到前面函數(shù)的解釋中,在參數(shù)tensors不是標(biāo)量的情況下,tensor.backward(grad_tensors)實(shí)現(xiàn)的是代價(jià)函數(shù)(torch.sum(tensors*grad_tensors))關(guān)于葉子節(jié)點(diǎn)的導(dǎo)數(shù)。

在上面例子中,loss = t.dot(z),因此用t.backward(z),實(shí)現(xiàn)的就是loss對(duì)于所有葉子結(jié)點(diǎn)的求導(dǎo),實(shí)際運(yùn)算結(jié)果和預(yù)期吻合。

t.backward(z,retain_graph=True)
print(z,x.grad,y.grad)
print(t,z.grad)

運(yùn)行結(jié)果如下:

tensor([-0.7830, 1.4468, 1.2440], requires_grad=True) tensor([-0.7830, 1.4468, 1.2440]) tensor([-0.7830, 1.4468, 1.2440])

tensor([-0.7145, -0.7598, 2.0756], grad_fn=AddBackward0>) None

上面的結(jié)果中,出現(xiàn)了一個(gè)問(wèn)題,雖然loss關(guān)于x和y的導(dǎo)數(shù)正確,但是z不再是葉子節(jié)點(diǎn)了。

問(wèn)題1:

當(dāng)使用t.backward(z,retain_graph=True)的時(shí)候, print(z.grad)結(jié)果是None,這意味著z不再是葉子節(jié)點(diǎn),這是為什么呢?

另外一個(gè)嘗試,loss = t.dot(z)=z.dot(t),但是如果用z.backward(t)替換t.backward(z,retain_graph=True),結(jié)果卻不同。

z.backward(t)
print(z,x.grad,y.grad)
print(t,z.grad)

運(yùn)行結(jié)果:

tensor([-1.0716, -1.3643, -0.0016], requires_grad=True) None None

tensor([-0.7324, 0.9763, -0.4036], grad_fn=AddBackward0>) tensor([-0.7324, 0.9763, -0.4036])

問(wèn)題2:

上面的結(jié)果中可以看到,使用z.backward(t),x和y都不再是葉子節(jié)點(diǎn)了,z仍然是葉子節(jié)點(diǎn),且得到的loss相對(duì)于z的導(dǎo)數(shù)正確。

上述仿真出現(xiàn)的兩個(gè)問(wèn)題,我還不能解釋,希望和大家交流。

問(wèn)題1:

當(dāng)使用t.backward(z,retain_graph=True)的時(shí)候, print(z.grad)結(jié)果是None,這意味著z不再是葉子節(jié)點(diǎn),這是為什么呢?

問(wèn)題2:

上面的結(jié)果中可以看到,使用z.backward(t),x和y都不再是葉子節(jié)點(diǎn)了,z仍然是葉子節(jié)點(diǎn),且得到的loss相對(duì)于z的導(dǎo)數(shù)正確。

另外強(qiáng)調(diào)一下,每次backward之前,需要注意葉子梯度節(jié)點(diǎn)是否清零,如果沒(méi)有清零,第二次backward會(huì)累計(jì)上一次的梯度。

簡(jiǎn)單的代碼可以看出:

#測(cè)試1,:對(duì)比上兩次單獨(dú)執(zhí)行backward,此處連續(xù)執(zhí)行兩次backward
t.backward(z,retain_graph=True)
print(z,x.grad,y.grad)
print(t,z.grad)
z.backward(t)
print(z,x.grad,y.grad)
print(t,z.grad)
# 結(jié)果x.grad,y.grad本應(yīng)該是None,因?yàn)楸A袅说谝淮蝏ackward的結(jié)果而打印出上一次梯度的結(jié)果
tensor([-0.5590, -1.4094, -1.5367], requires_grad=True) tensor([-0.5590, -1.4094, -1.5367]) tensor([-0.5590, -1.4094, -1.5367])tensor([-1.7914,  0.8761, -0.3462], grad_fn=AddBackward0>) Nonetensor([-0.5590, -1.4094, -1.5367], requires_grad=True) tensor([-0.5590, -1.4094, -1.5367]) tensor([-0.5590, -1.4094, -1.5367])tensor([-1.7914,  0.8761, -0.3462], grad_fn=AddBackward0>) tensor([-1.7914,  0.8761, -0.3462])
#測(cè)試2,:連續(xù)執(zhí)行兩次backward,并且清零,可以驗(yàn)證第二次backward沒(méi)有計(jì)算x和y的梯度
t.backward(z,retain_graph=True)
print(z,x.grad,y.grad)
print(t,z.grad)
x.grad.data.zero_()
y.grad.data.zero_()
z.backward(t)
print(z,x.grad,y.grad)
print(t,z.grad)
tensor([ 0.8671, 0.6503, -1.6643], requires_grad=True) tensor([ 0.8671, 0.6503, -1.6643]) tensor([ 0.8671, 0.6503, -1.6643])tensor([1.6231e+00, 1.3842e+00, 4.6492e-06], grad_fn=AddBackward0>) Nonetensor([ 0.8671,  0.6503, -1.6643], requires_grad=True) tensor([0., 0., 0.]) tensor([0., 0., 0.])tensor([1.6231e+00, 1.3842e+00, 4.6492e-06], grad_fn=AddBackward0>) tensor([1.6231e+00, 1.3842e+00, 4.6492e-06])

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • PyTorch梯度裁剪避免訓(xùn)練loss nan的操作
  • Pytorch BCELoss和BCEWithLogitsLoss的使用
  • Pytorch訓(xùn)練網(wǎng)絡(luò)過(guò)程中l(wèi)oss突然變?yōu)?的解決方案
  • pytorch MSELoss計(jì)算平均的實(shí)現(xiàn)方法
  • pytorch loss反向傳播出錯(cuò)的解決方案
  • Pytorch損失函數(shù)nn.NLLLoss2d()用法說(shuō)明
  • pytorch使用tensorboardX進(jìn)行l(wèi)oss可視化實(shí)例

標(biāo)簽:宿遷 常州 山東 蘭州 駐馬店 江蘇 六盤(pán)水 成都

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Pytorch中的backward()多個(gè)loss函數(shù)用法》,本文關(guān)鍵詞  Pytorch,中的,backward,多個(gè),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Pytorch中的backward()多個(gè)loss函數(shù)用法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Pytorch中的backward()多個(gè)loss函數(shù)用法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美18性精品| 国产成人啪精品| 黄视频网站在线看| 精品国产香蕉在线播出| 青青久久精品国产免费看| 国产精品免费久久| 日韩专区在线播放| 成人在免费观看视频国产| 色综合久久天天综合观看| 欧美一区二区三区性| 国产成人女人在线视频观看| 色综合久久天天综合| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 精品国产三级a| 亚洲精品中文字幕久久久久久| 精品国产香蕉在线播出 | 午夜久久网| 国产91精品一区| 免费国产在线观看| 成人在激情在线视频| 国产不卡在线播放| 美女免费毛片| 中文字幕一区二区三区 精品| 国产精品自拍在线观看| 国产美女在线观看| 成人免费观看网欧美片| 九九精品久久| 日韩免费片| 久久国产精品只做精品| 欧美大片a一级毛片视频| 精品国产亚洲一区二区三区| 日韩一级黄色片| 精品视频在线观看视频免费视频| 一级女性大黄生活片免费| 国产高清在线精品一区二区 | 精品国产一区二区三区久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日本免费看视频| 亚洲精品影院| 999久久久免费精品国产牛牛| 日韩av东京社区男人的天堂| 午夜欧美成人香蕉剧场| 97视频免费在线| 免费国产在线观看| 精品国产一区二区三区久| 国产一级生活片| 国产a免费观看| 国产一区免费观看| 日韩中文字幕在线播放| 91麻豆精品国产片在线观看| 天天做日日爱夜夜爽| 亚洲精品影院久久久久久| 国产一区免费在线观看| 精品久久久久久中文| 精品国产一区二区三区精东影业| 国产伦久视频免费观看 视频| 精品国产亚一区二区三区| 国产一级生活片| 成人高清视频在线观看| 国产一区二区精品| 亚洲精品久久久中文字| 欧美国产日韩在线| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 999久久久免费精品国产牛牛| 精品国产一区二区三区久久久狼 | 人人干人人草| 国产一区二区福利久久| 日韩免费在线观看视频| 亚欧视频在线| 亚洲天堂在线播放| 国产麻豆精品视频| 日韩在线观看视频免费| 国产网站免费视频| 亚洲精品中文字幕久久久久久| 午夜久久网| 九九精品影院| 欧美18性精品| 欧美电影免费看大全| 成人a大片高清在线观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚洲精品中文字幕久久久久久| 国产原创中文字幕| 亚洲天堂一区二区三区四区| 台湾毛片| 久久国产一久久高清| 九九精品久久久久久久久| 成人高清视频在线观看| 精品视频免费在线| 国产视频在线免费观看| 麻豆午夜视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚洲 男人 天堂| 午夜在线亚洲男人午在线| 欧美a级大片| 日韩av东京社区男人的天堂| 999精品在线| 日韩欧美一二三区| 久久99青青久久99久久| 麻豆午夜视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日韩av成人| 天天做人人爱夜夜爽2020毛片| 毛片的网站| 日韩女人做爰大片| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产精品12| 成人免费一级纶理片| 国产一区二区精品久久91| 精品视频在线观看免费| 国产国语对白一级毛片| 午夜激情视频在线观看| 国产一区二区精品久| 国产国语在线播放视频| 国产成人啪精品| 国产伦久视频免费观看视频| 二级特黄绝大片免费视频大片| 午夜精品国产自在现线拍| 精品久久久久久中文| 国产伦理精品| 国产高清在线精品一区二区| 久久精品成人一区二区三区| 日本伦理片网站| 亚久久伊人精品青青草原2020| 欧美另类videosbestsex高清| 色综合久久天天综合观看| 台湾毛片| 日韩中文字幕在线观看视频| 免费毛片播放| 色综合久久天天综合绕观看| 国产高清在线精品一区a| 韩国毛片免费大片| 一级女性全黄久久生活片| 精品国产香蕉在线播出| 国产高清在线精品一区a| 黄视频网站在线看| 九九国产| 精品视频在线观看免费| 韩国三级视频网站| 国产精品12| 成人av在线播放| 91麻豆国产福利精品| 欧美大片a一级毛片视频| 欧美电影免费| 二级特黄绝大片免费视频大片| 国产极品精频在线观看| 91麻豆精品国产自产在线| 99久久精品国产国产毛片| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产视频一区二区在线观看| 精品国产三级a| 欧美激情一区二区三区视频| 久久国产影视免费精品| 国产美女在线观看| 国产伦理精品| 日韩中文字幕在线观看视频| 久久99青青久久99久久| 精品久久久久久中文字幕2017| 欧美爱色| 美女免费毛片| 美女免费毛片| 精品国产三级a| a级黄色毛片免费播放视频| 精品视频免费在线| 国产高清在线精品一区a| 久久久久久久男人的天堂| 色综合久久天天综线观看| 日本特黄特色aaa大片免费| 欧美a级v片不卡在线观看| 久草免费在线色站| 日韩中文字幕一区二区不卡| 九九热精品免费观看| 国产高清在线精品一区a| 香蕉视频三级| 国产精品自拍在线观看| 国产精品自拍一区| 国产原创中文字幕| 九九久久国产精品| 日韩在线观看免费| 亚洲天堂免费| 欧美激情一区二区三区中文字幕| 99久久精品国产免费| 午夜久久网| 国产精品123| 久久99爰这里有精品国产| 国产成人精品在线| 日韩在线观看免费完整版视频| 国产网站免费视频| 台湾美女古装一级毛片| 国产伦理精品| 日本特黄特色aaa大片免费| 国产伦精品一区二区三区在线观看| 日本在线www| 国产一区二区精品久久91| 国产成人啪精品视频免费软件| 国产一区免费观看| 91麻豆国产福利精品| 亚洲 国产精品 日韩| 国产激情一区二区三区| 日本在线不卡免费视频一区| 91麻豆精品国产自产在线观看一区|