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