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个变量。
即使没有功能来实现这一点,自行编写的代码的补丁将帮助!
谢谢!
答
您可以使用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))
使用答案从另一个问题来看,并不意味着你正在训练两倍的变量。仍然有相同数量的*度。 – Aaron