libtorch學習筆記(3) 一些基本概念

2021-10-08 07:22:54 字數 3578 閱讀 8703

看名稱scaler就知道它是乙個數字,在libtorch中可以把標量視為零階張量,可以如此宣告

// 標量

auto scaler = torch::

tensor

(1.0f);

std::cout <<

"scaler sizes() length: "

<< scaler.

sizes()

.size()

<<

"\n"

<< scaler << std::endl;

向量就是一列數,

x ⃗=

[x1x

2⋮xn

]\begin \vec x= \begin x_\\ x_\\ \vdots\\ x_ \end \end

x=⎣⎢⎢⎢

⎡​x1

​x2​

⋮xn​

​⎦⎥⎥

⎥⎤​​

在libtorch中可以把向量看作一階張量,可以如此宣告:

// 向量

auto v = torch::

tensor()

;std::cout <<

"v sizes() length: "

<< v.

sizes()

.size()

<<

"\n"

<< v << std::endl;

輸出結果:

不能把向量理解成1xn或者nx1的矩陣,可以用tensor.t()來驗證,不論怎麼轉換,都是一樣的。

矩陣是二維陣列,

r m∗

n=a11

a12⋯a

1na21

a22⋯a

2n⋮⋯

⋱⋮am

1am2

⋯amn

\begin \mathbb^=\begin a_&a_&\cdots&a_\\ a_&a_&\cdots&a_\\ \vdots&\cdots&\ddots&\vdots&\\ a_&a_&\cdots&a_\\ \end \end

rm∗n=a

11​a

21​⋮

am1​

​a12

​a22

​⋯am

2​​⋯

⋯⋱⋯​

a1n​

a2n​

⋮amn

​​​​

可以看作二階張量,可以如此宣告:

// 矩陣

auto m = torch::

randn()

;std::cout <<

"m sizes() length: "

<< m.

sizes()

.size()

<<

"\n"

<< m << std::endl;

輸出結果如下:

要做數學上的矩陣運算,需使用matmul,普通的*乘法符號可能會得到不同的結果,請看:

a =x

1x2⋯

xnat

∗a=x

1∗x1

x1∗x

2⋯x1

∗xnx

2∗x1

x2∗x

2⋯x2

∗xn⋮

⋯⋱⋮x

n∗x1

xn∗x

2⋯xn

∗xna

∗at=

x12+

x22+

...+

xn2\begin a&= \begin x_ &x_&\cdots&x_ \end\\ a^t*a&=\begin x_*x_&x_*x_&\cdots&x_*x_\\ x_*x_&x_*x_&\cdots&x_*x_\\ \vdots&\cdots&\ddots&\vdots&\\ x_*x_&x_*x_&\cdots&x_*x_\\ \end\\ a*a^t&= x_^2+x_^2+ ... + x_^2 \end

aat∗aa

∗at​

=x1​

​x2​

​⋯​x

n​​=

x1​∗

x1​x

2​∗x

1​⋮x

n​∗x

1​​x

1​∗x

2​x2

​∗x2

​⋯xn

​∗x2

​​⋯⋯

⋱⋯​x

1​∗x

n​x2

​∗xn

​⋮xn

​∗xn

​​​=

x12​

+x22

​+..

.+xn2​​

torch::tensor a = torch::

randint(0

,16,)

;std::cout <<

"a (rows: "

<< a.

sizes()

[0]<<

", cols: "

<< a.

sizes()

[1]<<

")\n"

<< a << std::endl;

std::cout <<

"at:\n"

<< a.t(

)<< std::endl;

std::cout <<

"a.matmul(at): \n"

<< a.

matmul

(a.t()

)<< std::endl;

std::cout <<

"a*at: \n"

<< a*a.t(

)<< std::endl;

輸出結果:

可以是n階的,n從0到無窮大,乙個典型的多階張量就是表示影象的資料,影象可以分解成r,g,b三個通道,或者y,u,v三個通道,然後每個通道都是乙個二階矩陣,裡面存放各個顏色通道的值。

這是乙個三階張量的申明:

// 張量

auto t = torch::

randn()

;std::cout <<

"t sizes() length: "

<< t.

sizes()

.size()

<<

"\n"

<< t << std::endl;

輸出結果:

學習筆記 一些基礎

sudo nvidia docker run ti ipc host name network host v home data workspace ce893比如 import skimage.io as io image io.imread image dir astype float 這樣得到...

python3 的一些筆記

因為使用python越來越頻繁,有一些細節的東西經常用後一段時間沒去用就會忘記,做些簡單的筆記吧。a 0 while 1 a 1 if a 3 0 print aa else print bb continue 後面的全部不執行了 pass 似乎沒影響,cc也會出來 break 直接結束迴圈 pri...

學習中的一些筆記

取得某字元最後出現處起的字串。語法 string strrchr string haystack,string needle 返回值 整數 函式種類 資料處理 內容說明 本函式用來尋找字串 haystack 中的字元 needle 最後出現位置,並將此位置起至字串 haystack 結束之間的字串返...