)
這部分是pytorch自動求導的部分#首先導入pytorch包importtorch# 構(gòu)建一個全為1的tensor,同時設置需要進行梯度求導xtorch.ones(2,2,requires_gradTrue)print(x)tensor([[1., 1.], [1., 1.]], requires_gradTrue)# 做一個加法運算看到也是帶有求梯度性質(zhì)的yx2print(y)tensor([[3., 3.], [3., 3.]], grad_fnAddBackward0)print(y.grad_fn)AddBackward0 object at 0x7f9d17398668#在對y進行更多的操作zy*y*3#建議手寫下這個計算過程后面求梯度的時候也得算一下outz.mean()print(z,out)tensor([[27., 27.], [27., 27.]], grad_fnMulBackward0) tensor(27., grad_fnMeanBackward0)# 我不明白為啥這段LZ沒有輸出啊。。。atorch.randn(2,2,requires_gradFalse)a((a*3)/(a-1))print(a.requires_grad)a.requires_grad_(True)print(a.requires_grad)b(a*a).sum()print(b.grad_fn)# 使用鏈式法則求解out對x的求導out.backward()print(x.grad)tensor([[4.5000, 4.5000], [4.5000, 4.5000]])#隨機產(chǎn)生3個數(shù)xtorch.randn(3,requires_gradTrue)yx*2# 當其的平方和開跟小于1000結(jié)束循環(huán)whiley.data.norm()1000:yy*2print(y)tensor([-1348.8553, 58.7602, -407.5731], grad_fnMulBackward0)# 其實就是設置求導后不同維度的系數(shù)可以看到如果將結(jié)果除以對應的系數(shù)基本上都是一個數(shù)量級的如果想獲得對應的求導結(jié)果可以將系數(shù)全部設置為1即可不然按照教程的說法是無法對向量直接求導的vtorch.tensor([0.1,1.0,0.0001],dtypetorch.float)y.backward(v)print(x.grad)tensor([1.0240e02, 1.0240e03, 1.0240e-01])print(x.requires_grad)print((x**2).requires_grad)#當將代碼塊封裝在with這句代碼中就可以組織autograd設置跟蹤了#打印出來requires_grad為False了withtorch.no_grad():print((x**2).requires_grad)True True False參考地址:https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autograd-tutorial-py