一、简介
- 点积(数量积,dot product)
- 点积(数量积,dot product)
- 点积(数量积,dot product)
二、用法
1. 点积(torch.dot())
即数量积,对应相乘然后求和。
torch.dot(input, other, *, out=None) → Tensor
# 输入的两个张量必须为1维的。
和numpy的dot product不同,numpy的点积支持二维矩阵运算,但是得到的是矩阵积(即按照矩阵相乘法则进行计算。)
2. 矩阵逐元素乘法(Element-wise)(torch.mul())
两个矩阵对应相乘,有广播机制。
torch.mul()
3. 矩阵乘法(matrix-mattix multiplication)
矩阵乘法:nm 和 md矩阵相乘得 m*d.
- 二维矩阵乘法( torch.mm() )
# 二维矩阵的矩阵乘法,不支持广播机制。
torch.mm()
- 三维带batch的矩阵乘法 ( torch.bmm() )
输入的两个矩阵带有
batch size
的维度(第一维且相同),不支持广播机制。
输入的两个矩阵形状为(b, n, m)
和(b, m, d)
torch.bmm(bmat1, bmat2)
- 多维矩阵乘法 ( torch.matmul() )
torch.matmul()
①两个输入均1-d:按照点积进行运算。
②两个输入均2-d:按照二维矩阵乘积运算。
③1-d和2-d:(n) 和 (n, m)当成(1, n) 和 (n, m),求得矩阵乘积为(1, m),然后前置维度1删除最终得到 (m).
④**2-d和1-d:和③同理,
⑤N-d和M-d(M、N均≥1 且 M、N其中一个至少>2):**最后两个维度当成矩阵乘积,前面的均当成batch
。如 ( j ∗ 1 ∗ n ∗ n ) 和 ( k ∗ n ∗ n ) = ( j ∗ k ∗ n ∗ n ) (j*1*n*n)和(k*n*n) =(j*k*n*n) (j∗1∗n∗n)和(k∗n∗n)=(j∗k∗n∗n),同理, ( j ∗ 1 ∗ n ∗ m ) 和 ( k ∗ m ∗ p ) = ( j ∗ k ∗ n ∗ p ) (j*1*n*m)和(k*m*p) =(j*k*n*p) (j∗1∗n∗m)和(k∗m∗p)=(j∗k∗n∗p).