『PyTorch』第二彈_張量


參考:http://www.jianshu.com/p/5ae644748f21#

幾個數學概念:

標量(Scalar)是只有大小,沒有方向的量,如1,2,3等

向量(Vector)是有大小和方向的量,其實就是一串數字,如(1,2)

矩陣(Matrix)是好幾個向量拍成一排合並而成的一堆數字,如[1,2;3,4]

其實標量,向量,矩陣它們三個也是張量,標量是零維的張量,向量是一維的張量,矩陣是二維的張量,除此之外,張量不僅可以是三維的,還可以是四維的、五維的...

 

一點小注意:

1.由於torch和numpy的特殊關系,似乎numpy中array的操作大部分可以在Tensor上實踐

2.任何可以改變tensor內容的操作都會在方法名后加一個下划線'_',如x.copt_(y)、x.t_()、x.add_(y),等等

 

張量的基本操作演示:

 1 # coding=utf-8
 2 
 3 import torch
 4 
 5 
 6 # 特別注明:任何可以改變tensor內容的操作都會在方法名后加一個下划線'_'
 7 # 例如:x.copy_(y), x.t_(), 這倆都會改變x的值。
 8 
 9 
10 '''初始化操作'''
11 
12 x = torch.Tensor(5,3)      # 未初始化的張量
13 print(x)
14 x = torch.rand(5,3)        # 隨機初始化的張量
15 print(x)
16 print(x.size())            # 查看張量的尺寸
17                            # 這是一個tuple

 

-4.5163e+29  4.5806e-41 -4.5163e+29
 4.5806e-41 -8.3134e+23  4.5806e-41
-8.3134e+23  4.5806e-41 -8.3134e+23
 4.5806e-41 -8.3134e+23  4.5806e-41
-8.3134e+23  4.5806e-41 -8.3134e+23
[torch.FloatTensor of size 5x3]


 0.3349  0.7324  0.7708
 0.2973  0.1546  0.5236
 0.2481  0.8018  0.3527
 0.2328  0.2714  0.5307
 0.3042  0.5355  0.2955
[torch.FloatTensor of size 5x3]

torch.Size([5, 3])

 

 

 1 '''加法操作'''
 2 
 3 a = torch.ones(2,2)
 4 b = torch.zeros(2,2)
 5 
 6 # 語法一
 7 print(a+b)
 8 # 語法二
 9 print(torch.add(a,b))
10 # 語法三
11 print(b.add_(a))
12 # 語法三
13 c = torch.Tensor(2,2)
14 torch.add(a,b,out=c)
15 print(c)

 

 1  1
 1  1
[torch.FloatTensor of size 2x2]


 1  1
 1  1
[torch.FloatTensor of size 2x2]


 1  1
 1  1
[torch.FloatTensor of size 2x2]


 2  2
 2  2
[torch.FloatTensor of size 2x2]

 

 

 1 '''Numpy橋'''
 2 
 3 a = torch.ones(3,2)
 4 
 5 a = torch.ones(5)
 6 b = a.numpy()     # tensor轉換為array
 7 a.add_(1)
 8 print(b)          # a,b共用內存,屬於淺拷貝
 9 
10 import numpy as np
11 
12 a = np.ones(5)
13 b = torch.from_numpy(a)   # array轉換為tensor
14 np.add(a,1,out=a)
15 print(b)                  # a,b共用內存
16 
17 # 另外除了CharTensor之外,所有的tensor都可以在CPU運算和GPU預算之間相互轉換
18 # 使用CUDA函數來將Tensor移動到GPU上
19 # 當CUDA可用時會進行GPU的運算
20 x = torch.ones(2,2)
21 y = torch.eye(2,2)
22 if torch.cuda.is_available():
23     x = x.cuda()
24     y = y.cuda()
25 print(x,y)
26 # print(x+y)       # 我的設備沒配置好會出錯,不過顯卡太渣,以后有服務器玩再說吧

 

[ 2.  2.  2.  2.  2.]

 2
 2
 2
 2
 2
[torch.DoubleTensor of size 5]


 1  1
 1  1
[torch.cuda.FloatTensor of size 2x2 (GPU 0)]
 
 1  0
 0  1
[torch.cuda.FloatTensor of size 2x2 (GPU 0)]


Process finished with exit code 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM