日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

《动手学深度学习 PyTorch版》学习笔记(二):自动求梯度

發(fā)布時(shí)間:2024/7/19 pytorch 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《动手学深度学习 PyTorch版》学习笔记(二):自动求梯度 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、自動(dòng)求梯度

1、requires_grad_(), detach(), torch.no_grad()的區(qū)別
參考博客:https://www.jianshu.com/p/ff74ccae25f3

2、.grad_fn
每個(gè)Tensor都有一個(gè).grad_fn屬性,該屬性即創(chuàng)建該Tensor的Function, 就是說該Tensor是不是通過某些運(yùn)算得到的,若是,則grad_fn返回一個(gè)與這些運(yùn)算相關(guān)的對象,否則是None。

3、梯度

  • grad在反向傳播過程中是累加的(accumulated),這意味著每一次運(yùn)行反向傳播,梯度都會(huì)累加之前的梯度,所以一般在反向傳播之前需把梯度清零 .grad.data.zero_()
  • 在y.backward()時(shí),如果y是標(biāo)量,則不需要為backward()傳入任何參數(shù);否則,需要傳入一個(gè)與y同形的Tensor
x = torch.tensor([1.0, 2.0, 3.0, 4.0], requires_grad=True) y = 2 * x z = y.view(2, 2) print(z)

輸出

tensor([[2., 4.],[6., 8.]], grad_fn=<ViewBackward>)

現(xiàn)在 z 不是一個(gè)標(biāo)量,所以在調(diào)用backward時(shí)需要傳入一個(gè)和z同形的權(quán)重向量進(jìn)行加權(quán)求和得到一個(gè)標(biāo)量。

v = torch.tensor([[1.0, 0.1], [0.01, 0.001]], dtype=torch.float) z.backward(v) print(x.grad)

輸出

tensor([2.0000, 0.2000, 0.0200, 0.0020])

4、中斷梯度

x = torch.tensor(1.0, requires_grad=True) y1 = x ** 2 with torch.no_grad():y2 = x ** 3 y3 = y1 + y2print(x.requires_grad) print(y1, y1.requires_grad) # True print(y2, y2.requires_grad) # False print(y3, y3.requires_grad) # True y3.backward() print(x.grad)

總結(jié)

以上是生活随笔為你收集整理的《动手学深度学习 PyTorch版》学习笔记(二):自动求梯度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。