如何计算2-D张量和3-D张量之间的欧式距离?

时间:2019-03-16 11:23:58

标签: python tensorflow

我有一个二维张量 A ,其形状为(?, L ),它表示通过神经网络获得的特征(其中“?”是批量大小)和形状为( N K L 的3-D张量 B )。显然,在 B 中有形状为( K L )的 N 个数组,称为< strong> C 在这里。

现在,我该如何计算之间的平均欧氏距离(一排 A 与每一排 C 的平均距离) A 的每一行和 C 的每一行,而 A C 中的每一行都没有迭代,最后返回一个向量(?, N )的形状?

例如,当形状为(1, L )的 A 时,结果如下:

import tensorflow as tf

with tf.Graph().as_default(), tf.Session() as sess:
    A = tf.placeholder(tf.float32, [1, None])
    B = tf.placeholder(tf.float32, [None, None, None])
    dist = tf.reduce_mean(tf.norm(B - A, axis=2), axis=1)
    print(sess.run(dist, feed_dict={A: [[1, 2, 3]],
                                    B: [[[ 4,  5,  6], [ 7,  8,  9]],
                                        [[10, 11, 12], [13, 14, 15]]]}))
    # [ 7.7942286 18.186533 ]

我想知道,当A =([[1、2、3],[4、5、6]])(只是 A 的一个例子,其形状为( 2,3)),如何获得[2,2]形状的上述问题的结果?

2 个答案:

答案 0 :(得分:0)

import tensorflow as tf

with tf.Graph().as_default(), tf.Session() as sess:
    A = tf.placeholder(tf.float32, [1, None])
    B = tf.placeholder(tf.float32, [None, None, None])
    newA = tf.expand_dims(A, 0)
    dist = tf.reduce_mean(tf.norm(B - newA, axis=2), axis=1)
    print(sess.run(dist, feed_dict={A: [[1, 2, 3]],
                                    B: [[[ 4,  5,  6], [ 7,  8,  9]],
                                        [[10, 11, 12], [13, 14, 15]]]}))

答案 1 :(得分:0)

问题已解决如下:

import tensorflow as tf

with tf.Graph().as_default(), tf.Session() as sess:
    a = tf.placeholder(tf.float32, [None, None])
    b = tf.placeholder(tf.float32, [None, None, None])
    a_exp = tf.expand_dims(tf.expand_dims(a, 1), 1)
    dist = tf.reduce_mean(tf.norm(b - a_exp, axis=3), axis=2)
    print(sess.run(dist, feed_dict={a: [[1, 2, 3], [4, 5, 6]],
                                    b: [[[ 4,  5,  6], [ 7,  8,  9]],
                                        [[10, 11, 12], [13, 14, 15]]]}))
    # [[ 7.7942286 18.186533 ]
    #  [ 2.598076  12.990381 ]]