pytorch几种乘法的区别

pytorch几种乘法的区别,第1张

pytorch几种乘法的区别

torch.mul()是矩阵的点乘,即对应的位相乘,要求shape一样, 返回的还是个矩阵
torch.mm()是矩阵正常的矩阵相乘,(a, b)* ( b, c ) = ( a, c )
torch.dot()类似于mul(),它是向量(即只能是一维的张量)的对应位相乘再求和,返回一个tensor数值
torch.mv()是矩阵和向量相乘,类似于torch.mm()

np.dot(x,y)

如果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.]])>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/570904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存