1. 程式人生 > >『PyTorch』第二彈_張量

『PyTorch』第二彈_張量

ref play spl rip 出錯 margin logs 互轉 演示

參考: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

『PyTorch』第二彈_張量