张量(tensor)

1.张量的初始化

1
2
import torch
import numpy as np
  1. 由原始数据直接生成
  2. 从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
#! 使用GPU前,判断当前GPU环境是否可用
if torch.cuda.is_available():
print(f"GPU device is available")
x_rand=torch.rand((3,3))
x_rand=x_rand.to('cuda') #! 挂载到GPU上进行运算
else:
print(f"GPU device is not available")
GPU device is not available

4.1张量的拼接

  1. 使用torch.cat
  2. 使用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.]
------ 本文结束 thankyou 感谢阅读 ------

欢迎扫一扫上面的微信二维码,订阅 codeHub 公众号