Python tensorflow l2 pérdida sobre eje

Estoy usando python 3 con tensorflow Tengo una matriz, cada fila es un vector, quiero obtener una matriz de distancia, es decir, una computadora que usa la pérdida de la norma l2 , cada valor en la matriz será una distancia entre dos vectores

p.ej

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

Gracias

edición: esto no es un duplicado de esa otra pregunta sobre el cálculo de la norma para cada fila de una matriz, necesito la distancia de la norma por pares entre cada fila y cada otra fila.

Esta respuesta muestra cómo calcular la sum por pares de diferencias cuadradas entre una colección de vectores. Simplemente post-componiendo con la raíz cuadrada, llega a las distancias deseadas de par deseado:

 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. ]] 

Puede escribir una operación TensorFlow basada en la fórmula de la distancia euclidiana (pérdida de L2).

introduzca la descripción de la imagen aquí

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

Muestra seria

 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)) 

Como lo señaló @fuglede, si desea mostrar las distancias por pares, entonces podemos usar

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