张量流中两个向量的点积

use*_*886 25 python dot-product tensorflow

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

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

我知道有可能通过首先将向量X和Y广播到2-d张量然后使用tf.matmul来实现这一点.但是,结果是一个矩阵,我在标量之后.

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

Ish*_*nal 26

计算两个张量之间的点积(向量是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
Run Code Online (Sandbox Code Playgroud)


yue*_*ngz 21

除此之外tf.reduce_sum(tf.multiply(x, y)),你也可以这样做tf.matmul(x, tf.reshape(y, [-1, 1])).


aar*_*lle 14

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

tf.matmul(x,tf.transpose(y))
Run Code Online (Sandbox Code Playgroud)

要么

tf.matmul(tf.transpose(x),y)
Run Code Online (Sandbox Code Playgroud)

取决于x和y的尺寸

  • `matmul`可以为你移调东西:例如`tf.matmul(a,b,transpose_a = True,transpose_b = False)`你也可以转换b. (8认同)

Dav*_*ong 2

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