2017-08-02 3 views
2

J'ai un projet de classification knn, qui a besoin de calculer la distance euclidienne avec tensorflow pour la comparaison.Distance euclidienne dans Tensorflow, matrice de conversion

Le code d'origine sans tensorflow est comme ceci:

def euclidean_distance(self,x1, x2): 
 
     distance = 0.0 
 
     for i in range(len(x1)): 
 
      distance += pow(x1[i] - x2[i], 2) 
 
     print(distance) 
 
     return math.sqrt(distance)

et tensorflow est comme ceci:

distance = 0.0 
 
     for i in range(len(x1)): 
 
      distance = tf.negative(tf.sqrt(tf.reduce_sum(tf.square(tf.subtract(x1, x2))))) 
 
     return distance

Est-ce vrai? En raison de cette distance de code est devenu tensoriel, et j'ai besoin d'une méthode pour convertir ce tenseur en une matrice normale.

Toute aide est appréciée, merci!

Répondre

0

Afin d'obtenir ensemble e (matrice), vous devez exécuter le graphique comme coup

session=tf.Session() 
nd_distance=session.run(distance) 

Vous devez changer votre code pour

...... 
...... 
    distance = tf.sqrt(tf.reduce_sum(tf.square(tf.subtract(x1, x2)))) 
    nd_distance=session.run(distance) 
    print (nd_distance) 
    return nd_distance 

Je ne vois pas la nécessité de fonction tf.negative et for loop

+0

quand im essayant d'imprimer la distance était comme Tensor ("Sqrt_2457: 0", forme =(), DTYPE = float32) Tenseur ("Sqrt_2458: 0", forme =(), dtype = float32) mais rien ne s'est passé si j'essaie d'imprimer nd_distance comme votre code, une suggestion? – Elucist

+0

quelle est la valeur de x1 et x2? sont-ils aussi des tenseurs? – Mitiku

+0

non, il est matrice, comme ceci https://s1.postimg.org/o2x1vdypr/postimage.png il est la matrice de vecteur de caractéristique, après tf-idf – Elucist