)
這部分是pytorch自動(dòng)求導(dǎo)的部分#首先導(dǎo)入pytorch包importtorch# 構(gòu)建一個(gè)全為1的tensor,同時(shí)設(shè)置需要進(jìn)行梯度求導(dǎo)xtorch.ones(2,2,requires_gradTrue)print(x)tensor([[1., 1.], [1., 1.]], requires_gradTrue)# 做一個(gè)加法運(yùn)算看到也是帶有求梯度性質(zhì)的yx2print(y)tensor([[3., 3.], [3., 3.]], grad_fnAddBackward0)print(y.grad_fn)AddBackward0 object at 0x7f9d17398668#在對(duì)y進(jìn)行更多的操作zy*y*3#建議手寫(xiě)下這個(gè)計(jì)算過(guò)程后面求梯度的時(shí)候也得算一下outz.mean()print(z,out)tensor([[27., 27.], [27., 27.]], grad_fnMulBackward0) tensor(27., grad_fnMeanBackward0)# 我不明白為啥這段LZ沒(méi)有輸出啊。。。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)# 使用鏈?zhǔn)椒▌t求解out對(duì)x的求導(dǎo)out.backward()print(x.grad)tensor([[4.5000, 4.5000], [4.5000, 4.5000]])#隨機(jī)產(chǎn)生3個(gè)數(shù)xtorch.randn(3,requires_gradTrue)yx*2# 當(dāng)其的平方和開(kāi)跟小于1000結(jié)束循環(huán)whiley.data.norm()1000:yy*2print(y)tensor([-1348.8553, 58.7602, -407.5731], grad_fnMulBackward0)# 其實(shí)就是設(shè)置求導(dǎo)后不同維度的系數(shù)可以看到如果將結(jié)果除以對(duì)應(yīng)的系數(shù)基本上都是一個(gè)數(shù)量級(jí)的如果想獲得對(duì)應(yīng)的求導(dǎo)結(jié)果可以將系數(shù)全部設(shè)置為1即可不然按照教程的說(shuō)法是無(wú)法對(duì)向量直接求導(dǎo)的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)#當(dāng)將代碼塊封裝在with這句代碼中就可以組織autograd設(shè)置跟蹤了#打印出來(lái)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