*
若两个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()) Out[30]: tensor([[ 5., 11., 17.], [ 11., 25., 39.], [ 17., 39., 61.]])
|
参考
PyTorch 对应点相乘、矩阵相乘