• 3、线性代数


    1、矩阵转置 A[i,j]=A[j,i]

    2、对称矩阵 :A转置=A

    [0,2,3]

    [2 1 5]

    [3,5,1]

    3、三维矩阵 求和 axis=0 两个矩阵相加  axis=1 两个向量相加  ,axis=2 向量内部相加

    keepdims=True 求和后维度保持不变

    4、cumsum累加求和

    5、torch.mm() 或 torch.bmm() 【矩阵乘法,前二维后三维,均不可广播】

    torch.mm() 用于两个二维向量之间的矩阵乘法。如果 input1 是一个n×m张量,input2 是一个 m×p张量,将会输出一个 n×p 张量

        >>> a = torch.ones(3,4)
        >>> b = torch.ones(4,2)
        >>> torch.mm(a, b)   # torch.Size([3, 2])
        tensor([[4., 4.],
                [4., 4.],
                [4., 4.]])

    而 torch.bmm() 是用于两个三维张量之间的批次矩阵乘法(其中第0维为批次大小)。由于神经网络训练一般采用mini-batch,经常输入的是三维带batch矩阵。如果 input1 是一个 b×n×m 张量,input2 是一个 b×m×p 张量,将会输出一个 b×n×p 张量

        >>> a = torch.ones(3,4,5)
        >>> b = torch.ones(3,5,6)
        >>> torch.bmm(a, b)    # torch.Size([3, 4, 6])
        tensor([[[5., 5., 5., 5., 5., 5.],
                 [5., 5., 5., 5., 5., 5.],
                 [5., 5., 5., 5., 5., 5.],
                 [5., 5., 5., 5., 5., 5.]],
         
                [[5., 5., 5., 5., 5., 5.],
                 [5., 5., 5., 5., 5., 5.],
                 [5., 5., 5., 5., 5., 5.],
                 [5., 5., 5., 5., 5., 5.]],
         
                [[5., 5., 5., 5., 5., 5.],
                 [5., 5., 5., 5., 5., 5.],
                 [5., 5., 5., 5., 5., 5.],
                 [5., 5., 5., 5., 5., 5.]]])

    另外,这两个函数都无法广播
    6、torch.mv()【矩阵-向量乘法,不可广播】

    torch.mv(input, vec) 只支持矩阵和向量之间的乘法。如果 input 为 n×m,vec向量的长度为m,那么输出为 n×1的向量。不支持广播机制

        In[1]: vec = torch.arange(4)
        In[2]: mat = torch.arange(12).reshape(3,4)
        In[3]: torch.mv(mat, vec)
        Out[1]: tensor([14, 38, 62])

    torch.dot()【仅支持两个一维向量点积】

    只能支持两个一维向量,两向量相乘相加得到一个标量

        与 np.dot() 不同,np.dot() 既能向量点积,又能矩阵乘法

        a = torch.tensor([2,3])
        b = torch.tensor([1,2])
        c = torch.dot(a,b)
        print('a:',a.shape)                 # a: torch.Size([2])
        print('b:',b.shape)                 # b: torch.Size([2])
        print('torch.dot:',c,c.shape)       # torch.dot: tensor(8) torch.Size([])

    7、@【等价于 torch.dot() + torch.mv() + torch.mm()】

    mat1 @ mat2

        若mat1和mat2都是一维向量,那么对应操作就是torch.dot()
        若mat1是二维向量,mat2是一维向量,那么对应操作就是torch.mv()
        若mat1和mat2都是二维向量,那么对应操作就是torch.mm()

        vec1 = torch.arange(4)
        vec2 = torch.tensor([4,3,2,1])
        mat1 = torch.arange(12).reshape(4,3)
        mat2 = torch.arange(12).reshape(3,4)
         
        print(vec1 @ vec2) # 两个一维向量
        print(mat2 @ vec1) # 一个二维和一个一维
        print(mat1 @ mat2) # 两个二维向量
         
        Output:
        tensor(10)
        tensor([14, 38, 62])
        tensor([[ 20,  23,  26,  29],
                [ 56,  68,  80,  92],
                [ 92, 113, 134, 155],
                [128, 158, 188, 218]])

    torch.matmul() 【矩阵乘法,可高维,可广播】

    torch.matmul() 与 @ 类似,但它不止局限于一维和二维,可以扩展到高维,且可以广播

        如果输入的两个张量都是一维的,那么返回点积,得到一个数,对应的操作就是torch.dot()
        如果输入的两个张量都是二维的,那么返回矩阵乘积,对应的操作就是torch.mm()
        如果输入的第一个张量是二维的,第二个张量是一维的,matrix第二维需要与 vector维度相同,返回矩阵向量乘积,对应的操作就是torch.mv()

    8、L2 元素平方求和开根号

         L1 元素绝对值求和

  • 相关阅读:
    如何走出长期精神内耗的状态?
    Java 网络编程 —— 实现非阻塞式的服务器
    7天学完Spring:基础学习结束,关于Spring事务及其传播机制
    钉钉如何通过AppLink快速连接仓储系统
    Vue ElementUI 修改消息提示框样式—messageBox 的大小
    十六、一起学习Lua 文件 I/O
    Matter理论教程-通用-1-01:理论详解
    uniapp uni-combox 数据源使用对象,选择后获取对应项的ID,可指定自定义的balbel,value
    深度相机辅助导航避障(三):地面点云滤除
    【数据结构】基础:二叉树
  • 原文地址:https://blog.csdn.net/hzh839900/article/details/139579130