如何在张量流中为矩阵中每个行向量构造成对差平方?

时间:2018-06-25 07:27:38

标签: python numpy tensorflow matrix

我在TensorFlow中具有一个K * N维的二维张量,

对于张量中每个具有N维的行向量,我可以使用How to construct square of pairwise difference from a vector in tensorflow?中的方法来计算成对差的平方。

但是,我需要对K个行向量的结果求平均:执行每个向量的成对差平方并求平均值。

我该怎么办?需要您的帮助,非常感谢!!!

2 个答案:

答案 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]