中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Variable怎么在Pytorch中使用

發布時間:2021-01-06 16:01:34 來源:億速云 閱讀:176 作者:Leah 欄目:開發技術

Variable怎么在Pytorch中使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1.簡介

torch.autograd.Variable是Autograd的核心類,它封裝了Tensor,并整合了反向傳播的相關實現

Variable和tensor的區別和聯系

Variable是籃子,而tensor是雞蛋,雞蛋應該放在籃子里才能方便拿走(定義variable時一個參數就是tensor)

Variable這個籃子里除了裝了tensor外還有requires_grad參數,表示是否需要對其求導,默認為False

Variable這個籃子呢,自身有一些屬性

比如grad,梯度variable.grad是d(y)/d(variable)保存的是變量y對variable變量的梯度值,如果requires_grad參數為False,所以variable.grad返回值為None,如果為True,返回值就為對variable的梯度值

比如grad_fn,對于用戶自己創建的變量(Variable())grad_fn是為none的,也就是不能調用backward函數,但對于由計算生成的變量,如果存在一個生成中間變量的requires_grad為true,那其的grad_fn不為none,反則為none

比如data,這個就很簡單,這個屬性就是裝的雞蛋(tensor)

Varibale包含三個屬性:

data:存儲了Tensor,是本體的數據 grad:保存了data的梯度,本事是個Variable而非Tensor,與data形狀一致 grad_fn:指向Function對象,用于反向傳播的梯度計算之用

代碼1

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
y = x + temp + 2
y = y.mean() #求平均數
 
y.backward() #反向傳遞函數,用于求y對前面的變量(x)的梯度
print(x.grad) # d(y)/d(x)

輸出1

none

(因為requires_grad=False)

代碼2

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
 
y = x + temp + 2
y = y.mean() #求平均數
 
y.backward() #反向傳遞函數,用于求y對前面的變量(x)的梯度
print(temp.grad) # d(y)/d(temp)

輸出2

tensor([[0.2500, 0.2500],
[0.2500, 0.2500]])

代碼3

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
 
y = x + 2
y = y.mean() #求平均數
 
y.backward() #反向傳遞函數,用于求y對前面的變量(x)的梯度
print(x.grad) # d(y)/d(x)

輸出3

Traceback (most recent call last):
File "path", line 12, in <module>
y.backward()

(報錯了,因為生成變量y的中間變量只有x,而x的requires_grad是False,所以y的grad_fn是none)

代碼4

import numpy as np
import torch
from torch.autograd import Variable
 
x = Variable(torch.ones(2,2),requires_grad = False)
temp = Variable(torch.zeros(2,2),requires_grad = True)
 
 
y = x + 2
y = y.mean() #求平均數
 
#y.backward() #反向傳遞函數,用于求y對前面的變量(x)的梯度
print(y.grad_fn) # d(y)/d(x)

輸出4

none

2.grad屬性

在每次backward后,grad值是會累加的,所以利用BP算法,每次迭代是需要將grad清零的。

x.grad.data.zero_()

(in-place操作需要加上_,即zero_)

看完上述內容,你們掌握Variable怎么在Pytorch中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌鲁木齐市| 凤山市| 象山县| 阿荣旗| 孝昌县| 封开县| 安溪县| 洛宁县| 凉城县| 三穗县| 呼和浩特市| 慈利县| 沽源县| 新蔡县| 阳高县| 札达县| 广西| 静安区| 邵阳市| 定远县| 中卫市| 河北区| 朝阳县| 太湖县| 西林县| 徐汇区| 安西县| 宝鸡市| 习水县| 沾化县| 石城县| 梅河口市| 德化县| 镶黄旗| 博野县| 梁河县| 博兴县| 中阳县| 象州县| 读书| 平原县|