torch.mul()是矩阵的点乘,即对应的位相乘,要求shape一样, 返回的还是个矩阵
torch.mm()是矩阵正常的矩阵相乘,(a, b)* ( b, c ) = ( a, c )
torch.dot()类似于mul(),它是向量(即只能是一维的张量)的对应位相乘再求和,返回一个tensor数值
torch.mv()是矩阵和向量相乘,类似于torch.mm()
如果x,y都是一维张量,那么np.dot(x,y)是 ∑ i = 0 m x i y i \sum_{i=0}^{m}x_i y_i ∑i=0mxiyi
矩阵乘和向量乘矩阵乘法 | 符号 | 说明 |
---|---|---|
matrix product | · | 一般矩阵乘法 |
哈达玛积 | ⊙或○ | 逐元素对应相乘 |
克罗内克积 | $ \otimes $ | A的每个元素逐个与B矩阵相乘 |
向量乘法 | 符号 | 说明 |
---|---|---|
内积 点积 | · | 逐元素对应相乘之积的和 结果为标量 |
外积 | $ \otimes $ | 结果为矩阵 |
叉乘Cross Product | × | 结果为向量 |
点积是两个矩阵相同位置的 按元素乘积的 和
点乘的几何意义:点乘可以用来计算两个向量的夹角
x = tf.constant([0., 1., 2., 3.])
y= tf.ones(4)
# 1
tf.tensordot(x, y, axes=1)
<tf.Tensor: shape=(), dtype=float32, numpy=6.0>
# 2 我们可以通过执行按元素乘法,然后进行求和来表示两个向量的点积:
tf.reduce_sum(x * y)
<tf.Tensor: shape=(), dtype=float32, numpy=6.0>
矩阵-向量积
一个矩阵乘一个列向量 相当于 矩阵的列向量的线性组合
一个行向量 乘以矩阵 相当于矩阵的行向量的线性组合
B.shape, C.shape, tf.linalg.matvec(C,B)
(TensorShape([3, 4]),
TensorShape([4]),
<tf.Tensor: shape=(3,), dtype=float64, numpy=array([23., 23., 17.])>)
矩阵-矩阵乘法
一般矩阵乘法
A,B,tf.matmul(A,B)
<tf.Tensor: shape=(3, 4), dtype=float64, numpy=
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])>
<tf.Tensor: shape=(4, 3), dtype=float64, numpy=
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])>
<tf.Tensor: shape=(3, 3), dtype=float64, numpy=
array([[4., 4., 4.],
[4., 4., 4.],
[4., 4., 4.]])>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)