张量流中两个向量的点积
python
tensorflow
6
0

我想知道是否有一种简单的方法来计算两个向量(即一维张量)的点积并返回张量流中的标量值。

给定两个向量X =(x1,...,xn)和Y =(y1,...,yn),点积为dot(X,Y)= x1 * y1 + ... + xn * yn

我知道可以通过首先将向量X和Y广播到二维张量然后使用tf.matmul来实现。但是,结果是一个矩阵,而且我追求标量。

是否存在像tf.matmul这样的运算符特定于向量?

参考资料:
Stack Overflow
收藏
评论
共 5 个回答
高赞 时间 活跃

您可以使用tf.matmul和tf.transpose

tf.matmul(x,tf.transpose(y))

要么

tf.matmul(tf.transpose(x),y)

取决于x和y的尺寸

收藏
评论

计算两个张量(向量为1D张量)之间的点积的最简单方法之一是使用tf.tensordot

a = tf.placeholder(tf.float32, shape=(5))
b = tf.placeholder(tf.float32, shape=(5))

dot_a_b = tf.tensordot(a, b, 1)

with tf.Session() as sess:
    print(dot_a_b.eval(feed_dict={a: [1, 2, 3, 4, 5], b: [6, 7, 8, 9, 10]}))
# results: 130.0
收藏
评论

除了tf.reduce_sum(tf.multiply(x, y)) ,您还可以执行tf.matmul(x, tf.reshape(y, [-1, 1]))

收藏
评论

您可以执行tf.mul(x,y),然后执行tf.reduce_sum()

收藏
评论
import tensorflow as tf

x = tf.Variable([1, -2, 3], tf.float32, name='x')
y = tf.Variable([-1, 2, -3], tf.float32, name='y')

dot_product = tf.reduce_sum(tf.multiply(x, y))

sess = tf.InteractiveSession()
init_op = tf.global_variables_initializer()
sess.run(init_op)

dot_product.eval()

Out[46]: -14

这里,x和y都是向量。我们可以对元素进行乘积运算,然后使用tf.reduce_sum对所得向量的元素求和。该解决方案易于阅读,不需要重新设计。

有趣的是,在docs中似乎没有内置的点积运算符。

请注意,您可以轻松地检查中间步骤:

In [48]: tf.multiply(x, y).eval()
Out[48]: array([-1, -4, -9], dtype=int32)
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号