1.张量的初始化 1 2 import torchimport numpy as np
由原始数据直接生成
从numpyArray转换而来
1 2 3 4 5 6 data = [[1 , 2 ], [3 , 4 ]] x_data = torch.tensor(data) np_array = np.array(data) x_np = torch.from_numpy(np_array) x_np
tensor([[1, 2],
[3, 4]])
2.通过已有的张量来生成新的张量
新的张量可以继承原有张量的结构和数据属性 也可以重新指定新的数据类型
1 2 3 4 5 x_ones=torch.ones_like(x_data) print (f"ones Tensors:\n{x_ones} \n" )x_rand=torch.rand_like(x_data,dtype=torch.float ) print (f"Random Tensor:\n {x_rand} \n" )
ones Tensors:
tensor([[1, 1],
[1, 1]])
Random Tensor:
tensor([[0.7318, 0.2529],
[0.1007, 0.8059]])
3.张量的属性 1.维数
2.属性
3.存储的CPU或者GPU设备
1 2 3 print (f"shape of tensor: {x_data.shape} " )print (f"Datatype of tensor: {x_data.dtype} " )print (f"Device tensor of tensor: {x_data.device} " )
shape of tensor: torch.Size([2, 2])
Datatype of tensor: torch.int64
Device tensor of tensor: cpu
4.张量运算
有超过100多种张量的相关运算,其中包括转置、索引、切片等数学运算 这些运算既可以在CPU上运行也可以在GPU上面运行,下面演示一下如何使用GPU进行张量的运算
1 2 3 4 5 6 7 if torch.cuda.is_available(): print (f"GPU device is available" ) x_rand=torch.rand((3 ,3 )) x_rand=x_rand.to('cuda' ) else : print (f"GPU device is not available" )
GPU device is not available
4.1张量的拼接
使用torch.cat
使用torch.stack (与cat方法有些不同)
1 2 3 x_rand=torch.rand((3 ,3 )) t1=torch.cat([x_rand,x_rand,x_rand],dim=1 ) print (t1)
tensor([[0.8613, 0.8276, 0.4882, 0.8613, 0.8276, 0.4882, 0.8613, 0.8276, 0.4882],
[0.7835, 0.2157, 0.8945, 0.7835, 0.2157, 0.8945, 0.7835, 0.2157, 0.8945],
[0.1266, 0.6035, 0.1746, 0.1266, 0.6035, 0.1746, 0.1266, 0.6035, 0.1746]])
4.2张量的乘积和矩阵的乘法 1.乘积: 逐个原始相乘不改变原有的shape
2.矩阵乘法:需要满足矩阵的乘法运算
1 2 3 4 x_rand.mul(x_rand) x_rand*x_rand
tensor([[0.7419, 0.6849, 0.2384],
[0.6139, 0.0465, 0.8001],
[0.0160, 0.3642, 0.0305]])
1 2 3 4 x_rand.matmul(x_rand.T) x_rand @ x_rand.T
tensor([[1.6651, 1.2901, 0.6937],
[1.2901, 1.4606, 0.3856],
[0.6937, 0.3856, 0.4107]])
5.张量与numpy的相互转换
张量和numpy共用系统中的一块内存,改变其中的一个也会导致另一个的改变
1 2 3 4 t=torch.ones(5 ) n=t.numpy() print (f"tensor: {t} " )print (f"numpy: {n} " )
tensor: tensor([1., 1., 1., 1., 1.])
numpy: [1. 1. 1. 1. 1.]
1 2 3 4 t.add_(1 ) print (f"tensor: {t} " )print (f"numpy: {n} " )
tensor: tensor([2., 2., 2., 2., 2.])
numpy: [2. 2. 2. 2. 2.]