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


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

    一、张量的基本概念

    张量(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)。
  • 相关阅读:
    php redis分布式锁
    python生成PDF报告
    职场人该看懂的几个点
    ARM S5PV210的启动过程
    算法提高模板强连通分量tarjan算法
    互联网摸鱼日报(2023-05-27)
    .NET下免费开源的PDF类库(PDFSharp)
    HTML CSS个人网页设计与实现——人物介绍丁真(学生个人网站作业设计)
    layui柱状图tooltip获取x轴和y轴数据
    Facebook、亚马逊养号选择什么代理IP?
  • 原文地址:https://blog.csdn.net/weixin_42782150/article/details/127076953