《动手学深度学习》 第二天 (自动求梯度)
生活随笔
收集整理的這篇文章主要介紹了
《动手学深度学习》 第二天 (自动求梯度)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2.3、自動求梯度
MXNet提供的autograd模塊可以用來自動求梯度。
2.3.1 一個簡單的栗子
這里我們要求對函數 y = 2xTx (2乘以x的轉秩乘以X)求關于列向量 x 的梯度。(使用jupyter notebook)
1、 創建變量x,并賦初值
x = nd.arange(4).reshape((4,1)) # 4行一列 x
2、 調用attach_grad函數來申請存儲梯度所需要的內存
3、 為減少計算和內存開銷,默認條件下MXNet不會記錄用于求梯度的計算,這里我們需要調用 record函數 來要求MXNet記錄與求梯度有關的計算
with autograd.record():y = 2 * nd.dot(x.T, x)4、 通過調用backward函數自動求梯度
y.backward()這里可以驗證一下答案是否正確,我們知道,原函數的梯度是4x。
assert(x.grad - 4 * x).norm().asscalar() == 0 x.grad2.3.2 訓練模型和預測模型
默認情況下,autograd會將運行模式從預測模式轉為訓練模式,這時可以通過調用 is_training 函數來查看
print(autograd.is_training()) with autograd.record():print(autograd.is_training())2.3.3 對Python控制流求梯度
即使函數的計算圖包含了Python的控制流,我們還是可能使用MXNet對變量求梯度。
example
仍然使用record函數記錄計算,調用backward函數求梯度
a = nd.random.normal(shape=1) a.attach_grad() with autograd.record():c = f(a) c.backward()驗證是否正確
a.grad == c / a 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的《动手学深度学习》 第二天 (自动求梯度)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux基础知识——创建进程
- 下一篇: 《动手学深度学习 PyTorch版》学习