婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

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

Pytorch的backward()函數(shù)

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

 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.) ## 累加

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

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如果是標量,函數(shù)backward計算參數(shù)tensors對于給定圖葉子節(jié)點的梯度( graph leaves,即為設(shè)置requires_grad=True的變量)。

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

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

下面給出具體的例子:

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ǎo)數(shù),應(yīng)該是:

用代碼實現(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)    #在這個例子中,x,y,z就是葉子節(jié)點,而t不是,t的導(dǎo)數(shù)在backward的過程中求出來回傳之后就會被釋放,因而預(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

敲重點:

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

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

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

運行結(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)了一個問題,雖然loss關(guān)于x和y的導(dǎo)數(shù)正確,但是z不再是葉子節(jié)點了。

問題1:

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

另外一個嘗試,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)

運行結(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])

問題2:

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

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

問題1:

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

問題2:

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

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

簡單的代碼可以看出:

#測試1,:對比上兩次單獨執(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,因為保留了第一次backward的結(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])
#測試2,:連續(xù)執(zhí)行兩次backward,并且清零,可以驗證第二次backward沒有計算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])

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

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

標簽:宿遷 常州 山東 蘭州 駐馬店 江蘇 六盤水 成都

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Pytorch中的backward()多個loss函數(shù)用法》,本文關(guān)鍵詞  Pytorch,中的,backward,多個,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Pytorch中的backward()多個loss函數(shù)用法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Pytorch中的backward()多個loss函數(shù)用法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人性生交大合| 国产不卡一区视频| 黄色小说综合网站| 欧美日韩在线电影| 一区二区三区不卡视频| 丁香六月综合激情| 中文字幕中文在线不卡住| 国产在线视频一区二区三区| 欧美日韩精品一区二区三区蜜桃 | 欧美嫩在线观看| 亚洲欧美日韩小说| 91视频免费看| 亚洲图片另类小说| 欧美性生交片4| 午夜精品爽啪视频| 欧美日韩亚洲综合一区二区三区| 亚洲国产aⅴ天堂久久| 欧美猛男超大videosgay| 免费成人美女在线观看.| 欧美人动与zoxxxx乱| 黑人精品欧美一区二区蜜桃| 中文字幕精品—区二区四季| 99国产精品久久久| 天堂久久一区二区三区| 精品成人佐山爱一区二区| 成人蜜臀av电影| 香蕉成人啪国产精品视频综合网| 精品久久人人做人人爽| 99久久99久久免费精品蜜臀| 亚洲va天堂va国产va久| 国产精品色在线观看| 制服视频三区第一页精品| 国产美女精品一区二区三区| 亚洲免费观看高清完整版在线观看 | 色噜噜狠狠色综合中国| 免费人成精品欧美精品| 国产精品福利av| 精品欧美一区二区久久| 欧美主播一区二区三区| 国产一区二区伦理片| 亚洲成a人v欧美综合天堂下载| 国产亚洲精品aa午夜观看| 欧美精品一级二级| 91丨porny丨户外露出| 免费看黄色91| 亚洲图片欧美一区| 亚洲三级免费电影| 中文字幕乱码一区二区免费| 6080日韩午夜伦伦午夜伦| 97se亚洲国产综合自在线| 国产伦精品一区二区三区在线观看| 亚洲成人av一区| 亚洲综合激情小说| 亚洲乱码中文字幕| 成人欧美一区二区三区白人| 国产日本欧美一区二区| 久久综合色8888| 欧美成人精品3d动漫h| 欧美另类videos死尸| 在线中文字幕不卡| 91亚洲国产成人精品一区二区三| 国产乱理伦片在线观看夜一区| 九九热在线视频观看这里只有精品| 亚洲免费色视频| 亚洲少妇30p| 亚洲日本护士毛茸茸| 亚洲老妇xxxxxx| 亚洲素人一区二区| 亚洲欧美日韩中文字幕一区二区三区| 国产精品私房写真福利视频| 国产精品乱人伦中文| 成人欧美一区二区三区小说| 亚洲欧美日韩系列| 亚洲免费在线观看视频| 亚洲中国最大av网站| 亚洲国产日韩av| 日韩在线一二三区| 九九九精品视频| 懂色一区二区三区免费观看| av成人免费在线观看| 欧美亚洲一区二区在线观看| 欧美日韩国产不卡| 精品国产乱码久久久久久浪潮 | 欧美一区二区三区白人| 欧美成人一级视频| 欧美国产一区视频在线观看| 国产精品大尺度| 亚洲国产精品久久艾草纯爱| 午夜欧美电影在线观看| 男男gaygay亚洲| 国产91在线观看丝袜| 99精品视频在线观看| 欧美二区乱c少妇| 日韩欧美自拍偷拍| 中文无字幕一区二区三区| 亚洲欧美另类久久久精品2019| 亚洲精品免费在线播放| 亚洲va欧美va人人爽午夜 | 激情文学综合插| 成人国产精品免费观看| 色综合天天在线| 欧美一区二区三区四区久久| 日韩欧美国产高清| 久久女同互慰一区二区三区| 亚洲色图制服丝袜| 亚洲成av人片一区二区梦乃| 蜜桃av一区二区| 91老司机福利 在线| 欧美一区二区日韩| 亚洲天堂a在线| 国产精品资源网| 欧美日韩亚洲综合| 国产情人综合久久777777| 一区二区三区免费| 五月婷婷色综合| 风间由美中文字幕在线看视频国产欧美| 91在线精品一区二区| 欧美日韩国产小视频| 国产精品久久久久久久久免费樱桃| 亚洲综合无码一区二区| 国产福利视频一区二区三区| 在线播放日韩导航| 亚洲日本护士毛茸茸| 久久国产免费看| 欧美午夜在线一二页| 久久亚洲免费视频| 天天射综合影视| 97久久久精品综合88久久| 久久综合色8888| 五月天中文字幕一区二区| 国产精品亚洲成人| 精品国产伦一区二区三区免费| 亚洲综合999| 国产又黄又大久久| 欧美tk—视频vk| 六月婷婷色综合| 91精品啪在线观看国产60岁| 亚洲亚洲人成综合网络| 色88888久久久久久影院野外| 中文字幕一区二区三区不卡在线| 久久精品国产一区二区三| 欧美性猛交xxxx黑人交| 亚洲日本免费电影| 99久久er热在这里只有精品66| 久久久无码精品亚洲日韩按摩| 国产在线精品免费| 精品美女在线观看| 奇米影视一区二区三区| 日韩精品一区二区三区三区免费| 午夜欧美2019年伦理| 欧美刺激午夜性久久久久久久| 日本不卡一二三| 精品国产免费久久| 成人免费毛片a| 国产婷婷一区二区| 91在线精品秘密一区二区| 国产精品视频第一区| 色综合色综合色综合色综合色综合| 亚洲视频在线观看三级| 欧美丝袜丝nylons| 日产精品久久久久久久性色| 日韩视频在线一区二区| 丝瓜av网站精品一区二区| 精品免费视频一区二区| 极品少妇xxxx偷拍精品少妇| 欧美电视剧在线看免费| 狠狠色狠狠色综合日日91app| 精品免费99久久| 成人晚上爱看视频| 亚洲精品免费看| 欧美丰满一区二区免费视频| 久久成人免费网| 中文字幕欧美激情一区| 欧洲人成人精品| 蜜桃视频一区二区三区在线观看| 日韩美女视频一区二区在线观看| 国产不卡在线视频| 日韩精品成人一区二区在线| 2020国产精品自拍| 色婷婷av一区二区三区gif | 国产在线一区观看| 亚洲自拍另类综合| 久久精品视频免费| 欧美在线免费观看亚洲| 国产精华液一区二区三区| 亚洲午夜激情网站| 日韩欧美卡一卡二| 成人av高清在线| 国产在线国偷精品免费看| 一区二区三区欧美日韩| 亚洲精品一区二区三区精华液| 色天天综合色天天久久| 麻豆freexxxx性91精品| 亚洲成av人在线观看| 亚洲美女视频在线观看| 久久综合一区二区| 欧美一级片免费看| 欧美精品自拍偷拍动漫精品| 91热门视频在线观看| 国产毛片一区二区|