backward與自動求導詳解

2021-08-08 04:27:09 字數 1682 閱讀 3224

首先匯入模組

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...