如何有效地计算两个向量之间的距离?

时间:2017-06-01 03:38:32

标签: tensorflow

我需要反复计算cosine_distancetf.losses.cosine_distance会返回一个标量Tensor,所以我这样做了:

  x # a tensor list
  y # a tensor list
  for i in x:
     for j in y:
         distance = tf.losses.cosine_distance(i, j, dim=0)

这种方法使图形太大,程序加载速度太慢。我该如何优化呢?

1 个答案:

答案 0 :(得分:2)

循环在张量流中没有好处。 我假设张量列表中的所有向量长度相等

试试这个:

x_t = tf.stack(x)
y_t = tf.stack(y)
prod = tf.matmul(x_t, y_t, transpose_b=True)
x_len = tf.sqrt(tf.reduce_sum(tf.matmul(x_t, x_t), axis=0))
y_len = tf.sqrt(tf.reduce_sum(tf.matmul(y_t, y_t), axis=0))
cosine_dist = prod/tf.matmul(x_len, y_len, transpose_b=True)