gpt4 book ai didi

python - tf.multiply vs tf.matmul 计算点积

转载 作者:太空狗 更新时间:2023-10-29 19:32:36 24 4
gpt4 key购买 nike

我有一个形状为 [3,4] 的(向量的)矩阵 X,我想计算每对向量 (X[1].X[1]) 和 (X[1]) 之间的点积.X[2])...等

我看到他们用的是余弦相似度代码

tf.reduce_sum(tf.multyply(X, X),axis=1)

计算向量矩阵中向量之间的点积。但是,此结果仅计算 (X[i], X[i]) 之间的点积。

我使用 tf.matmul(X, X, transpose_b=True) 计算每两个向量之间的点积,但我仍然很困惑为什么 tf.multiply 没有这样做我认为我的代码有问题。

代码是:

data=[[1.0,2.0,4.0,5.0],[0.0,6.0,7.0,8.0],[8.0,1.0,1.0,1.0]]
X=tf.constant(data)
matResult=tf.matmul(X, X, transpose_b=True)

multiplyResult=tf.reduce_sum(tf.multiply(X,X),axis=1)
with tf.Session() as sess:
print('matResult')
print(sess.run([matResult]))
print()
print('multiplyResult')
print(sess.run([multiplyResult]))

输出是:

matResult
[array([[ 46., 80., 19.],
[ 80., 149., 21.],
[ 19., 21., 67.]], dtype=float32)]

multiplyResult
[array([ 46., 149., 67.], dtype=float32)]

如有任何建议,我将不胜感激

最佳答案

tf.multiply(X, Y)* 运算符执行逐元素乘法,以便:

[[1 2]    [[1 3]      [[1 6]
[3 4]] . [2 1]] = [6 4]]

wheras tf.matmul 执行矩阵乘法,以便:

[[1 0]    [[1 3]      [[1 3]
[0 1]] . [2 1]] = [2 1]]

使用 tf.matmul(X, X, transpose_b=True) 意味着您正在计算 X 。 X^T 其中^T表示矩阵的转置,.是矩阵乘法。

tf.reduce_sum(_, axis=1) 沿第一个轴(从 0 开始计数)求和,这意味着您正在对行求和:

tf.reduce_sum([[a, b], [c, d]], axis=1) = [a+b, c+d]

这意味着:

tf.reduce_sum(tf.multiply(X, X), axis=1) = [X[1].X[1], ..., X[n].X[n]]

如果您只想要每一行的范数,那么这就是您想要的。另一方面:

tf.matmul(X, X, transpose_b=True) = [
[ X[1].X[1], X[1].X[2], ..., X[1].X[n] ],
[ X[2].X[1], ..., X[2].X[n] ],
...
[ X[n].X[1], ..., X[n].X[n] ]
]

因此,如果您想要所有行对之间的相似性,这就是您所需要的。

关于python - tf.multiply vs tf.matmul 计算点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47583501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com