python Tensorflow L2在轴上的损失

时间:2019-01-27 13:46:40

标签: python python-3.x tensorflow linear-algebra

我在tensorflow中使用python 3 我有一个矩阵,每一行都是一个向量,我想得到一个距离矩阵-即计算机使用l2 norm loss,矩阵中的每个值都是两个向量之间的距离

例如

Dij = l2_distance(M(i,:), Mj(j,:)) 

谢谢

编辑: 这不是另一个问题of的重复问题{{3}},这是关于计算矩阵的每一行的范数,我需要每一行到每隔一行之间的成对范数距离。

2 个答案:

答案 0 :(得分:1)

This answer显示了如何计算向量集合之间的平方差的成对和。通过简单地用平方根进行后组合,就可以达到所需的成对距离:

M = tf.constant([[0, 0], [2, 2], [5, 5]], dtype=tf.float64)
r = tf.reduce_sum(M*M, 1)
r = tf.reshape(r, [-1, 1])
D2 = r - 2*tf.matmul(M, tf.transpose(M)) + tf.transpose(r)
D = tf.sqrt(D2)

with tf.Session() as sess:
    print(sess.run(D))

# [[0.         2.82842712 7.07106781]
#  [2.82842712 0.         4.24264069]
#  [7.07106781 4.24264069 0.        ]]

答案 1 :(得分:0)

您可以根据欧几里得距离(L2损失)的公式编写TensorFlow操作。

enter image description here

distance = tf.sqrt(tf.reduce_sum(tf.square(tf.subtract(x1, x2))))

样本将

import tensorflow as tf

x1 = tf.constant([1, 2, 3], dtype=tf.float32)
x2 = tf.constant([4, 5, 6], dtype=tf.float32)

distance = tf.sqrt(tf.reduce_sum(tf.square(tf.subtract(x1, x2))))

with tf.Session() as sess:
  print(sess.run(distance))

如@fuglede所指出的那样,如果要输出成对距离,则可以使用

tf.sqrt(tf.square(tf.subtract(x1, x2)))