我有一个二维张量 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]形状的上述问题的结果?
答案 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 ]]