张量流对称矩阵

时间:2017-10-12 20:29:20

标签: tensorflow matrix

我想创建一个n*n的对称矩阵,并在TensorFlow中训练这个矩阵。实际上,我应该只训练(n+1)*n/2个参数。我该怎么做?

我看到一些以前的帖子建议执行以下操作:

X = tf.Variable(tf.random_uniform([d,d], minval=-.1, maxval=.1, dtype=tf.float64))

X_symm = 0.5 * (X + tf.transpose(X))

但是,这意味着我必须培训n*n个变量,而不是n*(n+1)/2变量。

即使没有实现这一目标的功能,一段自编代码也会有所帮助!

谢谢!

2 个答案:

答案 0 :(得分:4)

你可以使用tf.matrix_band_part(input, 0, -1)从正方形创建一个上三角矩阵,所以这段代码可以让你在n(n+1)/2变量上训练虽然它有你创建 n*n

X = tf.Variable(tf.random_uniform([d,d], minval=-.1, maxval=.1, dtype=tf.float64))
X_upper = tf.matrix_band_part(X, 0, -1)
X_symm = 0.5 * (X_upper + tf.transpose(X_upper))

答案 1 :(得分:0)

请参阅gdelab的答案:在Tensorflow 2.x中,您必须使用以下代码。

X_upper = tf.linalg.band_part(X, 0, -1)