《动手学深度学习 PyTorch版》学习笔记(二):自动求梯度
生活随笔
收集整理的這篇文章主要介紹了
《动手学深度学习 PyTorch版》学习笔记(二):自动求梯度
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、自動求梯度
1、requires_grad_(), detach(), torch.no_grad()的區別
參考博客:https://www.jianshu.com/p/ff74ccae25f3
2、.grad_fn
每個Tensor都有一個.grad_fn屬性,該屬性即創建該Tensor的Function, 就是說該Tensor是不是通過某些運算得到的,若是,則grad_fn返回一個與這些運算相關的對象,否則是None。
3、梯度
- grad在反向傳播過程中是累加的(accumulated),這意味著每一次運行反向傳播,梯度都會累加之前的梯度,所以一般在反向傳播之前需把梯度清零 .grad.data.zero_()
- 在y.backward()時,如果y是標量,則不需要為backward()傳入任何參數;否則,需要傳入一個與y同形的Tensor
輸出
tensor([[2., 4.],[6., 8.]], grad_fn=<ViewBackward>)現在 z 不是一個標量,所以在調用backward時需要傳入一個和z同形的權重向量進行加權求和得到一個標量。
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)總結
以上是生活随笔為你收集整理的《动手学深度学习 PyTorch版》学习笔记(二):自动求梯度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 670 最大交换 (暴
- 下一篇: 《动手学深度学习》 第二天 (自动求梯度