2017-08-02 160 views
2

我有一個knn分類項目,需要計算歐氏距離和tensorflow進行比較。Tensorflow中的歐幾里得距離,轉換矩陣

原始代碼而不tensorflow是這樣的:

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)

並用tensorflow是這樣的:

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

這是正確的嗎?由於代碼距離變成了張量,我需要一種將張量轉換爲常規矩陣的方法。

任何幫助表示讚賞,謝謝!

回答

0

爲了獲得第二陣列(矩陣),你需要運行的圖形像打擊

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

您必須更改您的代碼

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

我沒有看到需要tf.negative功能和for loop

+0

時,即時通訊嘗試打印距離它是象 張量( 「Sqrt_2457:0」,形狀=(),D型細胞= FLOAT32) 張量(「Sqrt_2458:0」,形狀=(),dtype = float32) 但是沒有發生任何事情,如果我試圖打印nd_distance就像你的代碼,任何建議? – Elucist

+0

x1和x2的值是多少?他們是張力嗎? – Mitiku

+0

nope,它是矩陣,像這樣 https://s1.postimg.org/o2x1vdypr/postimage.png 它是特徵向量矩陣,經過tf-idf – Elucist