Косинусное сходство тензорного потока между каждым тензором в списке - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть 2 списка (массива) с тензорами и я хочу вычислить косинусное сходство тензоров между двумя списками. И получить список вывода (тензор) со сходствами.

Например:

a: [ 
[1, 2, 3], 
[4, 5, 6], 
[7, 8, 9] 
]   

b: [ 
[1, 2, 3], 
[7, 5, 6], 
[7, 4, 9] 
]

Вывод:

out: [
1.0,
0.84,
0.78
]

Был бы благодарен за любую помощь относительно того, как выполнить это в tenorflow.

Пока я закончил на этом:

a = tf.placeholder(tf.float32, shape=[None,3], name="input_placeholder_a")
b = tf.placeholder(tf.float32, shape=[None,3], name="input_placeholder_b")
normalize_a = tf.nn.l2_normalize(a, dim=1)
normalize_b = tf.nn.l2_normalize(b, dim=1)
cos_similarity=tf.matmul(normalize_a, normalize_b,transpose_b=True)

sess=tf.Session()
cos_sim=sess.run(cos_similarity,feed_dict={
  a: np.array([[1, 2, 3], 
               [4, 5, 6]]),

  b: np.array([[1, 2, 3], 
               [8, 7, 9]]),
})
print(cos_sim)

1 Ответ

1 голос
/ 08 ноября 2019
a = tf.placeholder(tf.float32, shape=[None,3], name="input_placeholder_a")
b = tf.placeholder(tf.float32, shape=[None,3], name="input_placeholder_b")
numerator = tf.reduce_sum(tf.multiply(a, b), axis=1)
denominator = tf.multiply(tf.norm(a, axis=1), tf.norm(b, axis=1))
cos_similarity = numerator/denominator

sess=tf.Session()
cos_sim=sess.run(cos_similarity,feed_dict={
  a: np.array([[1, 2, 3], 
               [4, 5, 6]]),

  b: np.array([[1, 2, 3], 
               [8, 7, 9]]),
})
print(cos_sim)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...