Как рассчитать косинусное сходство и евклидово расстояние между двумя тензорами в TF2.0? - PullRequest
0 голосов
/ 06 марта 2020

У меня есть два тензора (OQ, OA) с формами, как показано ниже в конце последних слоев в моей модели.

Форма OQ: (1, 600)

Форма OA: ( 1, 600)

Эти тензоры относятся к типу tenorsflow. python .framework.ops.Tensor '

  1. Как можно вычислить косинусное сходство и евклидово расстояние для этих тензоров в Tensorflow 2.0?
  2. Получаем ли мы снова тензор или одно значение оценки между [0,1]? Пожалуйста помоги. enter image description here

Я пробовал это, но не смог просмотреть счет.

score_cosine = tf.losses.cosine_similarity(tf.nn.l2_normalize(OQ, 0), tf.nn.l2_normalize(OA, 0))
print (score_cosine)

Вывод: Тензор ("Neg_1: 0", shape = (1,), dtype = float32)

1 Ответ

3 голосов
/ 06 марта 2020

Вы можете рассчитать евклидово расстояние и косинусное сходство в тензорном потоке 2.X, как показано ниже. Возвращенный вывод также будет тензорным.

import tensorflow as tf

# It should be tf 2.0 or greater
print("Tensorflow Version:",tf.__version__)

#Create Tensors
x1 = tf.constant([1.0, 112332.0, 89889.0], shape=(1,3))
print("x1 tensor shape:",x1.shape)
y1 = tf.constant([1.0, -2.0, -8.0], shape=(1,3))
print("y1 tensor shape:",y1.shape)

#Cosine Similarity
s = tf.keras.losses.cosine_similarity(x1,y1)
print("Cosine Similarity:",s)

#Normalized Euclidean Distance
s = tf.norm(tf.nn.l2_normalize(x1, 0)-tf.nn.l2_normalize(y1, 0),ord='euclidean')
print("Normalized Euclidean Distance:",s)

#Euclidean Distance
s = tf.norm(x1-y1,ord='euclidean')
print("Euclidean Distance:",s)

Вывод вышеуказанного кода - -

Tensorflow Version: 2.1.0
x1 tensor shape: (1, 3)
y1 tensor shape: (1, 3)
Cosine Similarity: tf.Tensor([0.7897223], shape=(1,), dtype=float32)
Normalized Euclidean Distance: tf.Tensor(2.828427, shape=(), dtype=float32)
Euclidean Distance: tf.Tensor(143876.33, shape=(), dtype=float32)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...