亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PyTorch中的Variable變量詳解

 更新時(shí)間:2020年01月07日 14:35:31   作者:Wei Ji  
今天小編就為大家分享一篇PyTorch中的Variable變量詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

一、了解Variable

顧名思義,Variable就是 變量 的意思。實(shí)質(zhì)上也就是可以變化的量,區(qū)別于int變量,它是一種可以變化的變量,這正好就符合了反向傳播,參數(shù)更新的屬性。

具體來說,在pytorch中的Variable就是一個(gè)存放會(huì)變化值的地理位置,里面的值會(huì)不停發(fā)生片花,就像一個(gè)裝雞蛋的籃子,雞蛋數(shù)會(huì)不斷發(fā)生變化。那誰是里面的雞蛋呢,自然就是pytorch中的tensor了。(也就是說,pytorch都是有tensor計(jì)算的,而tensor里面的參數(shù)都是Variable的形式)。如果用Variable計(jì)算的話,那返回的也是一個(gè)同類型的Variable。

【tensor 是一個(gè)多維矩陣】

用一個(gè)例子說明,Variable的定義:

import torch
from torch.autograd import Variable # torch 中 Variable 模塊
tensor = torch.FloatTensor([[1,2],[3,4]])
# 把雞蛋放到籃子里, requires_grad是參不參與誤差反向傳播, 要不要計(jì)算梯度
variable = Variable(tensor, requires_grad=True)
 
print(tensor)
"""
 1 2
 3 4
[torch.FloatTensor of size 2x2]
"""
 
print(variable)
"""
Variable containing:
 1 2
 3 4
[torch.FloatTensor of size 2x2]
"""

注:tensor不能反向傳播,variable可以反向傳播。

二、Variable求梯度

Variable計(jì)算時(shí),它會(huì)逐漸地生成計(jì)算圖。這個(gè)圖就是將所有的計(jì)算節(jié)點(diǎn)都連接起來,最后進(jìn)行誤差反向傳遞的時(shí)候,一次性將所有Variable里面的梯度都計(jì)算出來,而tensor就沒有這個(gè)能力。

v_out.backward() # 模擬 v_out 的誤差反向傳遞

print(variable.grad) # 初始 Variable 的梯度
'''
 0.5000 1.0000
 1.5000 2.0000
'''

三、獲取Variable里面的數(shù)據(jù)

直接print(Variable) 只會(huì)輸出Variable形式的數(shù)據(jù),在很多時(shí)候是用不了的。所以需要轉(zhuǎn)換一下,將其變成tensor形式。

print(variable)  # Variable 形式
"""
Variable containing:
 1 2
 3 4
[torch.FloatTensor of size 2x2]
"""
 
print(variable.data) # 將variable形式轉(zhuǎn)為tensor 形式
"""
 1 2
 3 4
[torch.FloatTensor of size 2x2]
"""
 
print(variable.data.numpy()) # numpy 形式
"""
[[ 1. 2.]
 [ 3. 4.]]
"""

擴(kuò)展

在PyTorch中計(jì)算圖的特點(diǎn)總結(jié)如下:

autograd根據(jù)用戶對Variable的操作來構(gòu)建其計(jì)算圖。

1、requires_grad

variable默認(rèn)是不需要被求導(dǎo)的,即requires_grad屬性默認(rèn)為False,如果某一個(gè)節(jié)點(diǎn)的requires_grad為True,那么所有依賴它的節(jié)點(diǎn)requires_grad都為True。

2、volatile

variable的volatile屬性默認(rèn)為False,如果某一個(gè)variable的volatile屬性被設(shè)為True,那么所有依賴它的節(jié)點(diǎn)volatile屬性都為True。volatile屬性為True的節(jié)點(diǎn)不會(huì)求導(dǎo),volatile的優(yōu)先級(jí)比requires_grad高。

3、retain_graph

多次反向傳播(多層監(jiān)督)時(shí),梯度是累加的。一般來說,單次反向傳播后,計(jì)算圖會(huì)free掉,也就是反向傳播的中間緩存會(huì)被清空【這就是動(dòng)態(tài)度的特點(diǎn)】。為進(jìn)行多次反向傳播需指定retain_graph=True來保存這些緩存。

4、backward()

反向傳播,求解Variable的梯度。放在中間緩存中。

以上這篇PyTorch中的Variable變量詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論