张量的基本概念+张量的聚合、拼接、比较、随机化采样、序列化等操作+升维、降维

张量的基本概念+张量的聚合、拼接、比较、随机化采样、序列化等操作

一、张量的基本概念

张量(Tensor),就是多维数组。当维度小于或等于2时,张量又有一些更熟悉的名字:

  1. 矩阵: 2维张量又被称为【矩阵】(Matrix);
  2. 向量: 1维张量又被称为【向量】(Vector);
  3. 标量: 0维张量又被称为【标量】(Scalar),其实就是一个数值。
  • torch.rand(2,3):创建一个形状为(2,3)的随机张量,每个值从[0,1)之间的均匀分布中抽取;
  • torch.randn(2,3):创建一个形状为(2,3)的随机张量,每个值从标准正态分布(均值0,方差1)中抽取;

二、张量的聚合操作

聚合操作(Aggregation):常见的张量聚合运算包括:求平均、求和、最大值、最小值等。

张量的聚合运算关于dim的规则:

在做张量的运算操作时,dim设定了哪个维,就会遍历这个维去做运算(也称“沿着该维运算”),其他为顺序不变。

  • 当dim= n n n(n>2) 时,则结果的 n + 1 n+1 n+1 维发生变化,其余维度不变。
  • 当dim= 1 1 1 时,则结果变为两个向量的运算,维度变形。为了使结果保持正确的维度,聚合操作提供了keepdim参数,默认设置为False,需要显示地设为True

示例代码:

import torch
x  = torch.tensor([[1,2,3],[4,5,6]],dtype=torch.float32)  # 不指定dtype=torch.float32,计算x.mean(dim=0)将会报错RuntimeError: mean(): input dtype should be either floating point or complex dtypes.Got Long instead
x.mean(dim=0)
>>>
tensor([2.5000, 3.5000, 4.5000])
x.mean(dim=1)
>>>
tensor([2., 5.])

# 设置参数keepdim是结果保持正确的维度
x.mean(dim=0,keepdim=True)
>>>
tensor([[2.5000, 3.5000, 4.5000]])

x.mean(dim=1,keepdim=True)
>>>
tensor([[2.],
        [5.]])

三、张量的拼接操作

张量的拼接操作torch.cat)也是类似的,通过指定维度dim,获得不同的拼接结果。

张量的拼接运算关于dim的规则:

在做张量的运算操作时,dim设定了哪个维,就会遍历这个维去做运算(也称“沿着该维运算”),其他为顺序不变。

  • 当dim= n n n 时,则结果的 n + 1 n+1 n+1 维发生变化,其余维度不变。 (备注:dim的 n n n 从0开始计数,结果的 n + 1 n+1 n+1 维从1开始计数。)
x = torch.tensor([[1,2,3],[4,5,6]],dtype=torch.float32)
y = torch.tensor([[7,8,9],[10,11,12]],dtype=torch.float32)
torch.cat((x,y),dim=0)
>>>
tensor([[ 1.,  2.,  3.],
        [ 4.,  5.,  6.],
        [ 7.,  8.,  9.],
        [10., 11., 12.]])

torch.cat((x,y), dim=1)
>>>
tensor([[ 1.,  2.,  3.,  7.,  8.,  9.],
        [ 4.,  5.,  6., 10., 11., 12.]])

张量的升维、降维

有时为了适配某些运算,需要对一个张量进行升维或降维。具体而言:

升维: 就是通过torch.unsqueeze(input, dim, out=None)函数,对输入张量的dim位置插入维度1,并返回一个新的张量。与索引相同,dim的值也可以为负数。

降维: 就是通过torch.squeeze(input, dim=None, out=None)函数。

  • 在不指定dim时,张量中形状为1的所有维都将被除去。如:输入形状为(A,1,B,1,C,1,D)的张量,那么输出形状就为(A,B,C,D)。
  • 在指定dim时,降维操作只在给定维度上。如:输入形状为(A,1,B),squeeze(input,dim=0)函数将会保持张量不变,只有用squeeze(input,dim=1)函数时,形状才会变成(A,B)。

猜你喜欢

转载自blog.csdn.net/weixin_42782150/article/details/127076953