日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中list函数中variables变量_如何在Python中使用变量,浅谈,Pytorch,的,Variable,方法...

發布時間:2024/7/5 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中list函数中variables变量_如何在Python中使用变量,浅谈,Pytorch,的,Variable,方法... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Variable的基本概念

autograd.Variable 是包的核心類。它包裝了張量,并且支持幾乎所有的操作。一旦你完成了你的計算, 就可以調用

.backward() 方法

自動計算所有的梯度

。你還可以通過

.data 屬性

訪問原始的張量

,而關于

該 variable(變量)的梯度

會被累計到

.grad

上去。

通俗來講:

Variable實質上也就是可以變化的變量,在Pytorch中的Variable就是一個存放會變化值的地理位置,里面的值會不停發生變化,就像一個裝雞蛋的籃子,里邊的雞蛋數會不斷發生變化,而Pytorch中的Tensor就好比是里面的雞蛋。

也就是說,

Pytorch都是由Tensor(Tensor 是一個多維矩陣)計算的,而Tensor里面的參數都是Variable的形式。

如果用Variable計算的話,那返回的也是一個同類型的Variable。這正好就符合了反向傳播,參數更新的屬性。

備注:Tensor不能反向傳播,Variable可以反向傳播。

Variable的自動求導

Variable還有一個針對自動求導實現來說非常重要的類 - Function。

Variable 和 Function 是相互聯系的, 并且它們構建了一個非循環的圖,編碼了一個完整的計算歷史信息。 每一個 variable(變量)都有一個

.grad_fn 屬性

, 它引用了一個已經創建了 Variable 的 Function。

調用

.backward()

方法——實現Variable 的自動求導

計算變量variable的導數,可以在 Variable 上調用

.backward() 方法

如果變量variable是

標量的形式

(例如, 它包含一個元素數據), 則再調用

.backward() 方法

時,不必指定任何參數;

但是,

如果變量variable是

非標量的形式

例如, 它包含更多的元素數據),則再調用

.backward() 方法

時,必須去指定一個

grad_output 參數

,該參數是一個匹配

shape(形狀)

的張量。

PyTorch中Variable的使用方法

Variable一般的初始化方法,默認是不求梯度的。

import torch

from torch.autograd import Variable # 導入torch中Variable模塊

x_tensor = torch.randn(2,3) # 創建2*3的張量矩陣

#將tensor轉換成Variable

x = Variable(x_tensor)

print(x.requires_grad)

>>>

False

x = Variable(x_tensor,requires_grad=True) #Varibale 默認時不要求梯度的,如果要求梯度,需要說明

print(x)

>>>

tensor([[0.1163, 0.7213, 0.5636],

[1.1431, 0.8590, 0.7056]], requires_grad=True)

典型范例:

import torch

from torch.autograd import Variable # torch 中 Variable 模塊

tensor = torch.FloatTensor([[1,2], [3,4]]) # 創建2*2的張量矩陣

print(tensor)

>>>

tensor([[1., 2.],

[3., 4.]])

variable = Variable(tensor, requires_grad=True) # 張量轉為變量——自變量x

print(variable)

>>>

tensor([[1., 2.],

[3., 4.]], requires_grad=True)

# 定義變量y關于自變量x的函數關系

## Tensor情形

t_out = torch.mean(tensor*tensor) # 求解x^2項的均值,函數表達式:y = 1/n*sum(x1^2+...+xn^2)

print(t_out)

>>>

tensor(7.5000)

## Variable情形

v_out = torch.mean(variable*variable)

print(v_out)

>>>

tensor(7.5000, grad_fn=)

# 求解梯度

# 模擬 v_out 的誤差反向傳遞

v_out.backward() # t_out.backward()報錯,由于Tensor不能反向傳播,Variable可以反向傳播

print(variable.grad) # 初始 Variable 的梯度

>>>

tensor([[0.5000, 1.0000],

[1.5000, 2.0000]])

#### 梯度的計算原理:

# v_out = 1/4 * sum(variable*variable) 這是計算圖中的 v_out 計算步驟

# 針對于 v_out 的梯度就是, d(v_out)/d(variable) = 1/4*2*variable = variable/2

備注:

利用Variable計算時, 它在幕后一步步默默地搭建著一個龐大的系統,叫做

計算圖(computational graph)

計算圖的作用

:是將所有的計算步驟 (節點) 都連接起來,最后進行誤差反向傳遞的時候,一次性將所有 Variable 里面的修改幅度 (梯度) 都計算出來, 而 Tensor 就沒有這個能力。

獲取Variable里面的數據

直接

print(variable)

只會輸出

Variable

形式的數據,在很多時候是用不了的(比如想要用 plt 畫圖), 所以我們要轉換一下,將它轉變成

Tensor

形式。

Variable轉變為其他形式的方法:

variable

.data

——將Variable 形式轉變為Tensor 形式

variable

.data.numpy()

——將Variable 形式轉變為Numpy 形式

備注:variable為存放Variable 形式的變量名

典型范例:

import torch

from torch.autograd import Variable # torch 中 Variable 模塊

tensor = torch.FloatTensor([[1,2], [3,4]]) # 創建2*2的張量矩陣

variable = Variable(tensor, requires_grad=True) # 張量轉為變量——自變量x

print(variable) # Variable 形式

>>>

tensor([[1., 2.],

[3., 4.]], requires_grad=True)

print(variable.data) # tensor 形式

>>>

tensor([[1., 2.],

[3., 4.]])

print(variable.data.numpy()) # numpy 形式

>>>

[[1. 2.]

[3. 4.]]

完整教學實例

(1) 變量variable是

標量的形式

(例如, 它包含一個元素數據),調用

.backward() 方法

求梯度。

import torch

from torch.autograd import Variable

# 創建 variable(變量)

x = Variable(torch.ones(2,2), requires_grad=True)

print(x)

>>>

tensor([[1., 1.],

[1., 1.]], requires_grad=True)

# variable(變量)的操作

y = x+2

print(y)

>>>

tensor([[3., 3.],

[3., 3.]], grad_fn=)

print(y.grad_fn) # y 由操作創建,所以它有 grad_fn 屬性

>>>

# y 的更多操作

z = y * y * 4

out = z.mean()

print("z:{}\nout:{}\n".format(z, out))

>>>

z:tensor([[36., 36.],

[36., 36.]], grad_fn=)

out:36.0

# 求梯度

out.backward()

print(x.grad) # d(out)/dx 的梯度

>>>

tensor([[10.5000, 10.5000],

[10.5000, 10.5000]])

(2) 變量variable是

非標量的形式

(例如, 它包含更多的元素數據),調用

.backward() 方法

求梯度,必須去指定一個

grad_output 參數

,該參數是一個匹配

shape(形狀)

的張量。

import torch

from torch.autograd import Variable

# 創建 variable(變量)

x = Variable(torch.rand(3), requires_grad=True)

print(x)

>>>

tensor([0.4635, 0.4550, 0.5725], requires_grad=True)

# variable(變量)的操作

y = x*2

print(y)

>>>

tensor([0.9271, 0.9100, 1.1449], grad_fn=)

while y.data.norm() < 1000:

y = y*2

print(y)

>>>

tensor([ 949.3414, 931.8120, 1172.4226], grad_fn=)

# 求梯度

gradients = torch.FloatTensor([0.1, 1.0, 0.0001]) # 設置參數gradient

y.backward( gradient=gradients )

print(x.grad)

>>>

tensor([2.0480e+02, 2.0480e+03, 2.0480e-01])

總結

以上是生活随笔為你收集整理的python中list函数中variables变量_如何在Python中使用变量,浅谈,Pytorch,的,Variable,方法...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。