在 torch 中, variable 是乙個存放會變化的值(變數)的地理位置。可以理解為乙個容器,裡面的值會不停的變化,就像乙個裝雞蛋的籃子, 雞蛋數會不停變動。 那誰是裡面的雞蛋呢, 自然就是 torch 的 tensor 。如果用乙個 variable 進行計算,那返回的也是乙個同型別的 variable。
例如,定義乙個variable:
# coding=gbk
import torch
from torch.autograd import variable
# 先生雞蛋
tensor = torch.floattensor([[1,2],[3,4]])
# 把雞蛋放到籃子裡, requires_grad是參不參與誤差反向傳播, 要不要計算梯度
variable = variable(tensor, requires_grad=true)
print(tensor)
print(variable)
輸出結果:
tensor([[1., 2.],
[3., 4.]])
tensor([[1., 2.],
[3., 4.]], requires_grad=true)
先來對比一下tensor和variable的計算,計算平方的均值:
#進行平方計算,tensor的值為上面定義的。
t_out = torch.mean(tensor*tensor) # x^2
v_out = torch.mean(variable*variable) # x^2
print(t_out)
#輸出結果:tensor(7.5000)
print(v_out)
#輸出結果:tensor(7.5000, grad_fn=)
到目前為止, 我們看不出兩者有什麼不同,但是時刻記住,variable 計算時, 它在背景幕布後面一步步默默地搭建著乙個龐大的系統, 叫做計算圖(computational graph), 這個圖是用來幹嘛的? 原來是將所有的計算步驟 (節點) 都連線起來, 最後在進行誤差反向傳遞的時候, 一次性將所有 variable 裡面的修改幅度 (梯度) 都計算出來, 而 tensor 就沒有這個能力啦。
v_out = torch.mean(variable*variable)
就是在計算圖中新增的乙個計算步驟,計算誤差反向傳遞的時候有它乙份功勞, 下面舉個例子:
v_out.backward() #模擬v_out的誤差反向傳遞
# 下面兩步看不懂沒關係, 只要知道 variable 是計算圖的一部分, 可以用來傳遞誤差就好.
# v_out = 1/4 * sum(variable*variable) 這是計算圖中的 v_out 計算步驟
# 針對於 v_out 的梯度就是, d(v_out)/d(variable) = 1/4*2*variable = variable/2
print(variable.grad) # 初始 variable 的梯度
'''輸出結果:
tensor([[0.5000, 1.0000],
[1.5000, 2.0000]])
'''
直接print(variable)
只會輸出 variable 形式的資料,在很多時候是用不了的(比如想要用 plt 畫圖),所以我們要轉換一下,將它變成 tensor 形式。
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.]]
"""
注:本學習筆記學習之莫煩python,**執行為截稿前最新的結果
學習資料:1)pytorch 官網
2)莫煩python
Shell指令碼學習筆記 二 變數
變數與字串 bash shell沒有所謂的 資料形態 除非使用內建declare特別指定變數的型態。在bash shell中,只有一種資料型態 以字元組成的字串 不必經過事先宣告的程式想用就用 設定變數值之後,該變數值只在當前的shell環境中有效。變數名長度無限制,區分大小寫。設定變數的方法 變數...
Python學習筆記 二 變數型別
list 列表 是 python 中使用最頻繁的資料型別。列表可以完成大多數集合類的資料結構實現。它支援字元,數字,字串甚至可以包含列表 所謂巢狀 列表用 標識。是python最通用的復合資料型別。看這段 就明白。列表中的值得分割也可以用到變數 頭下標 尾下標 就可以擷取相應的列表,從左到右索引預設...
go學習筆記 二 變數 常量
原始碼檔案以 test結尾 例如 test.go 測試方法名以test開頭 例如 func test xx t testing.t package fib import fmt testing func testfiblist t testing.t fmt.println 裡邊給出了三種賦值方式 ...