Как построить квадрат попарной разности от вектора в тензорном потоке? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть 1D-вектор с N-размерностью в TensorFlow,

как построить сумму попарно возведенной в квадрат разницы?

Пример

Входной вектор
[1,2,3]
Выход 6
Рассчитано как

(1-2)^2+(1-3)^2+(2-3)^2.

, если у меня есть вход как N-димный вектор l, выходные данные должны быть sigma_ {i, j} ((l_i-l_j) ^ 2).

Добавлен вопрос : если у меня 2d матрица и я хочу выполнитьодин и тот же процесс для каждой строки матрицы, а затем усреднить результаты из всех строк, как я могу это сделать?Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Для парной разности вычтите input и транспонируйте input и возьмите только верхнюю треугольную часть, как:

pair_diff = tf.matrix_band_part(a[...,None] - 
                      tf.transpose(a[...,None]), 0, -1)

Тогда вы можете возвести в квадрат и суммировать различия.

Код:

a = tf.constant([1,2,3])
pair_diff = tf.matrix_band_part(a[...,None] - 
                      tf.transpose(a[...,None]), 0, -1)
output = tf.reduce_sum(tf.square(pair_diff))

with tf.Session() as sess:
  print(sess.run(output))
  # 6
0 голосов
/ 25 июня 2018

использовать tf.subtract?Тогда np.sum.Дай мне знать, как это работает для тебя

...