批量化处理和矩阵(torch)

发布于:2024-05-19 ⋅ 阅读:(144) ⋅ 点赞:(0)

高维可以看成二维的堆叠

总结:二维是一维的堆叠,三维是二维的堆叠。但似乎是为了引入矩阵,本来应该是左上角是第一组权重和第一组变量的乘积这种表示表示来着,最后成了和列向量乘积(即矩阵乘法必须第一个的列和第二个的行数相等),但更高维度又变了回来,所以之后更高维的维数必须一一对应。

如:(3,5,6,4)的矩阵只可以和(3,5,4,6)的矩阵相乘,每个二维矩阵一一相乘

得到(3,5,6,6)的矩阵。

这应该是为了引入矩阵计算,之后变回来是为了批量化计算

一维张量和一维张量相乘,相当于权重和变量相乘,结果是一个数

数加数,0维可以直接相加,所以最后是一个0维张量

res=torch.matmul(torch.tensor([1, 2]),torch.tensor([1, 2]))
#tensor(5)  0维

二维张量和一维张量相乘,相当于多组权重和变量相乘,结果是一个一维张量。扩维

res=torch.matmul(torch.tensor([[3, 4], [1, 2]]),torch.tensor([1, 2]))
# tensor([11,  5])    torch.Size([2])

如5就是[1,2]和[1,2]对应元素相乘后相加得到的。因为俩个结果是0维,可以相加,

所以最后输出5

二维张量和二维张量相乘,相当于多组权重和多组变量相乘,结果是一个二维张量

向量+向量 ,不可以直接相加,最后是一个二维张量

 如[3,6]就是[1,2]和[[1,1],[2,2]]矩阵乘法后相加得到的

这就是矩阵乘法伢,对应元素相乘相加。

res=torch.matmul(torch.tensor([[3, 4], [1, 2]]),torch.tensor([[1, 2], [1, 2]]))
#tensor([[ 7, 14],         torch.Size([2, 2])
        [ 3,  6]])

最开始我以为应该是下面这样:

左上角是第一组权重和第一组变量的乘积

右上角是最后一组权重和第一组变量的乘积

左下角是第一组权重和最后一组变量的乘积

右下角是最后一组权重和最后一组变量的乘积

但结果表明这就是纯正的矩阵乘法,

或者也可以这么理解吧,右边一维向量时是按列来排序的,上面是简写了

res=torch.matmul(torch.tensor([3, 4]),torch.tensor([[1],[2]]))
res1=torch.matmul(torch.tensor([3, 4]),torch.tensor([1,2]))

#tensor([11])
tensor(11)

似乎确实是这样,只不过最后的结果一个是一维张量,一个是零维张量 

 一维张量和二维张量相乘

res=torch.matmul(torch.tensor([3, 4]),torch.tensor([[1, 2],[1, 2]]))
tensor([ 7, 14])
torch.Size([2])

发现确实是左侧行向量,右侧列向量。这就是简单的矩阵运算

三维张量以及更高维度的张量看成二维张量的堆叠。 

三维张量和二维张量相乘,相当于多批次(每一批次多组)的二维矩阵相乘,结果是一个三维张量

res=torch.matmul(torch.tensor([[[1, 2], [3, 4]],[[1, 2], [3, 4]]])
                        ,torch.tensor([[1, 2], [1, 2]]))
tensor([[[ 3,  6],
         [ 7, 14]],

        [[ 3,  6],
         [ 7, 14]]])
torch.Size([2, 2, 2])

二维张量和三维张量相乘,自动把二维张量扩充到对应维度的三维张量

如[3377]也就是[1234]和矩阵[1111]矩阵乘法后相加得到的


res=torch.matmul(torch.tensor([[1, 2], [3, 4]]),
        torch.tensor([[[1, 2], [1, 2]],[[1, 1], [1, 1]]]))
tensor([[[ 3,  6],
         [ 7, 14]],

        [[ 3,  3],
         [ 7,  7]]])
torch.Size([2, 2, 2])

三维张量和三维张量相乘

res=torch.matmul(torch.tensor([[[1, 2], [3, 4]],[[1, 2], [3, 4]]]),
    torch.tensor([[[1, 2], [1, 2]],[[1, 1], [1, 1]]]))

tensor([[[ 3,  6],
         [ 7, 14]],

        [[ 3,  3],
         [ 7,  7]]])
torch.Size([2, 2, 2])

矩阵加矩阵,最后是一个三维张量        

四维时:

shape=[2,1,4,5],b:shape=[1,1,5,4]相乘,输出的结果中,前两维保留的是[2,1],最终结果shape=[2,1,4,4]


网站公告

今日签到

点亮在社区的每一天
去签到