PyTorch學習筆記(二) 變數

2021-09-22 12:31:54 字數 2206 閱讀 7347

在 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 裡邊給出了三種賦值方式 ...