我在TensorFlow中具有一个K * N维的二维张量,
对于张量中每个具有N维的行向量,我可以使用How to construct square of pairwise difference from a vector in tensorflow?中的方法来计算成对差的平方。
但是,我需要对K个行向量的结果求平均:执行每个向量的成对差平方并求平均值。
我该怎么办?需要您的帮助,非常感谢!!!
答案 0 :(得分:0)
代码,然后运行结果:
a = tf.constant([[1,2,3],[2,5,6]])
a = tf.expand_dims(a,1)
at = tf.transpose(a, [0,2,1])
pair_diff = tf.matrix_band_part( a - at, 0, -1)
output = tf.reduce_sum(tf.square(pair_diff), axis=[1,2])
final = tf.reduce_mean(output)
with tf.Session() as sess:
print(sess.run(a - at))
print(sess.run(output))
print(sess.run(final))
给出以下结果:
1)a - at
(计算与您发布的链接相同但包含Rowise的内容)
[[[ 0 1 2]
[-1 0 1]
[-2 -1 0]]
[[ 0 3 4]
[-3 0 1]
[-4 -1 0]]]
2)output
(取矩阵带部分的总和,除行外的所有维度,即,您得到的每一行代码的结果)
[ 6 26]
3)final
行之间的平均值
16
答案 1 :(得分:0)
与How to construct square of pairwise difference from a vector in tensorflow?类似的逻辑,但需要进行一些更改才能处理2d:
a = tf.constant([[1,2,3], [4, 6, 8]])
pair_diff = tf.transpose(a[...,None, None,] - tf.transpose(a[...,None,None,]), [0,3,1,2])
reshape_diff = tf.reshape(tf.matrix_band_part(pair_diff, 0, -1), [-1, tf.shape(a)[1]*tf.shape(a)[1]])
output = tf.reduce_sum(tf.square(reshape_diff),1)[::tf.shape(a)[0]+1]
with tf.Session() as sess:
print(sess.run(output))
#[ 6 24]