首先匯入模組
import torch
from torch.autograd import variable
設定requires_grad=true
x=variable(torch.tensor([10]),requires_grad=true)
y=x*5
y.backward()
print x
.grad
variable containing:
5[torch.floattensor of size 1]
輸出y是乙個標量,所以backward()
不需要引數
再次反向傳播
y
.backward()
print x
.grad
variable containing:
10[torch.floattensor of size 1]
x.grad
進行了累加
x=variable(torch.tensor([2,3]),requires_grad=true)
y=x*5
y.backward(torch.tensor([2,3]))
print x
.grad
variable containing:
1015
[torch.floattensor of size 2]
y1=5*x1
y2=5*x2
backward
傳入torch.tensor([2,3])
,即y=2*y1+3*y2,y=10*x1+15*x2,
再分別求導得到10,15。
再次反向傳播,x.grad
進行了累加。
y
.backward(torch.tensor([2,3]))
print x
.grad
variable containing:
2030
[torch.floattensor of size 2]
backward( )
,必須傳入引數,並且維度和y一致。
x=variable(torch.tensor([2,4]),requires_grad=true)
y=x*5
y[0] = x[ 0] ** 2 + 3 * x[1]
y[1] = x[ 1] ** 2 + 2 * x[0]
y.backward(torch.floattensor([1, 0]))
print x
.grad
x.grad
.data
.zero_()
求導時,對y0求得,2*x0+3,
對y1求導為,2*x1+2,
這裡都用到了x0,x1,一般反向傳播後都會釋放掉,所以再次傳播需要設定retain_variables
y.backward(torch.floattensor([1, 0]),retain_variables=true)
Pytorch中使用backward 求導詳解
backward 是pytorch中用來求梯度的方法,可以分為三種情況來使用。此時可以直接使用out.backwark import torch from torch.autograd import variable 生成乙個內容為 2,3 的張量,varibale 預設是不要求梯度的,如果要求梯度...
Autograd 自動求導
import torch 建立張量並設定requires grad true來追蹤其計算歷史 x torch.ones 2,2,requires grad true print x tensor 1.1.1.1.requires grad true y x 2print y tensor 3.3.3...
Autograd 自動求導
import torch 建立張量並設定requires grad true來追蹤其計算歷史 x torch.ones 2,2,requires grad true print x tensor 1.1.1.1.requires grad true y x 2print y tensor 3.3.3...