2017-10-12 187 views
0

我想創建一個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

回答

0

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