Pytorch乘法

*

若两个tensor的维度相同,*符号表示对应元素相乘。例如:

1
2
3
4
5
a = torch.Tensor([[1, 2, 3], [1, 2, 3]]).view(-1, 2)
b = torch.Tensor([[3, 2, 1], [3, 2, 1]]).view(-1, 2)
print('a:',a)
print('b:',b)
print('a*b:',a*b)

运行结果

1
2
3
4
5
6
7
8
9
a: tensor([[1., 2.],
[3., 1.],
[2., 3.]])
b: tensor([[3., 2.],
[1., 3.],
[2., 1.]])
a*b: tensor([[3., 4.],
[3., 3.],
[4., 3.]])

若两个tensor的维度不相同,则将某一个tensor扩展(复制)成相同的维度,然后*表示对应位置相乘。例如:

1
2
3
4
5
a = torch.Tensor([[1, 2, 3], [1, 2, 3]]).view(-1, 2)
b = torch.Tensor([[3, 2, 1]]).view(3, -1)
print('a:',a)
print('b:',b)
print('a*b:',a*b)

运行结果:

1
2
3
4
5
6
7
8
9
a: tensor([[1., 2.],
[3., 1.],
[2., 3.]])
b: tensor([[3.],
[2.],
[1.]])
a*b: tensor([[3., 6.],
[6., 2.],
[2., 3.]])

mul

对应点相乘,x.mul(y) ,即点乘操作,点乘不求和操作,又可以叫作Hadamard product;点乘再求和,即为卷积

1
2
3
4
5
6
7
8
9
10
11
12
13
14
data = [[1,2], [3,4], [5, 6]]
tensor = torch.FloatTensor(data)

tensor
Out[27]:
tensor([[ 1., 2.],
[ 3., 4.],
[ 5., 6.]])

tensor.mul(tensor)
Out[28]:
tensor([[ 1., 4.],
[ 9., 16.],
[ 25., 36.]])

mm

矩阵相乘,x.mm(y), 矩阵大小需满足: (i, n)x(n, j)

1
2
3
4
5
6
7
8
9
10
11
tensor
Out[31]:
tensor([[ 1., 2.],
[ 3., 4.],
[ 5., 6.]])

tensor.mm(tensor.t()) # t()是转置
Out[30]:
tensor([[ 5., 11., 17.],
[ 11., 25., 39.],
[ 17., 39., 61.]])

参考

PyTorch 对应点相乘、矩阵相乘

------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道