Евклидово расстояние в Tensorflow, преобразовать матрицу

У меня есть проект классификации knn, который должен вычислить евклидово расстояние с тензорным потоком для сравнения.

Исходный код без тензорного потока выглядит так:

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)

а с тензорным потоком так:

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

Это правильно? Из-за этого кода расстояние стало тензором, и мне нужен метод для преобразования этого тензора в нормальную матрицу.

Любая помощь приветствуется, спасибо!


person Elucist    schedule 02.08.2017    source источник


Ответы (1)


Чтобы получить массив nd (матрицу), вам нужно запустить график, например удар

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

person Mitiku    schedule 02.08.2017
comment
когда я пытался напечатать расстояние, это было похоже на Tensor (Sqrt_2457: 0, shape = (), dtype = float32) Tensor (Sqrt_2458: 0, shape = (), dtype = float32), но ничего не произошло, если я пытаюсь напечатать nd_distance, как ваш код, любое предложение? - person Elucist; 02.08.2017
comment
чему равны х1 и х2? они тоже тензоры? - person Mitiku; 02.08.2017
comment
нет, это матрица, вот такая s1.postimg.org/o2x1vdypr/postimage.png это векторная матрица признаков, после tf-idf - person Elucist; 02.08.2017
comment
Я не могу понять из этого кода, вы можете опубликовать весь код? - person Mitiku; 02.08.2017
comment
это слишком длинно и довольно личное, спасибо за помощь в любом случае, я ценю это: D - person Elucist; 02.08.2017
comment
@Elucist может быть, вы забыли вызвать функцию печати. проверьте, добавили ли вы печать ( nd_distance) перед оператором возврата. - person Mitiku; 24.08.2017