J

JakeSun

V1

2022/08/08阅读:16主题:全栈蓝

矩阵相乘

矩阵相乘详解

已知三个矩阵

数学上的矩阵相乘 C = A B

数学表示

程序表示

多维矩阵:torch.matmul(A,B)

if:

then: torch.matmul(A, B)

二维矩阵相乘:torch.mm(A,B)

# 矩阵相乘
x = tensor([[123],
            [334],
            [333]])

# torch.matmul表示矩阵的乘法
torch.matmul(x,x)
Out[1]: 
tensor([[161720],
        [242733],
        [212430]])
        
# 两个维度对上就可以进行运算

x = tensor([[123],
            [334],
            [333]])
            
y = tensor([[12],
            [33],
            [44]])
torch.matmul(x, y)
Out[2]: 
tensor([[1920],
        [2831],
        [2427]])

数学上的矩阵对位相乘

数学表示

程序表示

torch.mul(A,B)


# 表示矩阵对位相乘
x = tensor([[123],
            [334],
            [333]])
# 方法1
x * x
Out[3]: 
tensor([[ 1,  4,  9],
        [ 9,  916],
        [ 9,  9,  9]])

# 方法2        
torch.mul(x,x)
Out[4]: 
tensor([[ 1,  4,  9],
        [ 9,  916],
        [ 9,  9,  9]])

带有batch的三维就一阵相乘

torch.bmm(A, B)

,

torch.bmm(A, B)

t = tensor([[[123],
             [334],
             [333]],
             
            [[123],
             [334],
             [333]]])

T = torch.bmm(t, t)
T.shape

Out[5]: torch.Size([233])

T
Out[6]: 
tensor([[[161720],
         [242733],
         [212430]],
        [[161720],
         [242733],
         [212430]]])
         
         
# 两个维度不同
u = tensor([[[12],
             [33],
             [44]],
            [[12],
             [33],
             [44]]])
t = tensor([[[123],
             [334],
             [333]],
            [[123],
             [334],
             [333]]])
             
u.shape
Out[7]: torch.Size([232])
t.shape
Out[8]: torch.Size([233])

torch.bmm(t, u)
Out[9]: 
tensor([[[1920],
         [2831],
         [2427]],
        [[1920],
         [2831],
         [2427]]])

torch.bmm(t, u).shape
Out[10]: torch.Size([232])


分类:

后端

标签:

后端

作者介绍

J
JakeSun
V1