2017-10-12 15 views
0

n * nの対称行列を作成し、この行列をTensorFlowで訓練したいと考えています。効果的には(n + 1)* n/2個のパラメータだけを訓練すべきです。私はこれをどのようにするべきですか? 。 - 1、MAXVAL = 0.1、DTYPE = TFTensorflow対称行列

X = tf.Variable(tf.random_uniform([D、D]、MINVAL =:

は、私は次の操作を行い示唆以前のいくつかのスレッドを見ました。 float64))

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

しかし、これは、IがN n個の変数を訓練しなければならないことを意味しないN(N + 1)/ 2変数。

これを達成する機能がない場合でも、自己記述コードのパッチが役立ちます!

ありがとうございます!

+0

をもう1つの質問から、あなたが2倍の変数を訓練しているわけではありません。依然として同じ自由度があります。 – Aaron

答えて

0

あなたは振り出しから上三角行列を作成するためにtf.matrix_band_part(input, 0, -1)を使用することができますので、それはあなたがn*n作成持っているが、このコードはn(n+1)/2変数に電車にあなたをできるようになる:答えを使用して

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)) 
関連する問題