Tensorflow对称矩阵

问题描述:

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

我看到一些先前线程这表明执行以下操作:

X = tf.Variable(tf.random_uniform([d,d],MINVAL = - 1,MAXVAL = 0.1,D型细胞= TF。 float64))

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

然而,这意味着我必须培养ñn个变量,不是n(N + 1)/ 2个变量。

即使没有功能来实现这一点,自行编写的代码的补丁将帮助!

谢谢!

+0

使用答案从另一个问题来看,并不意味着你正在训练两倍的变量。仍然有相同数量的*度。 – Aaron

您可以使用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))