2017-05-28 1 views
0

私がしようとしているのは、サイズが大きくなる(つまり、ニューロンが各繰り返しに追加される)ニューラルネットワークの重み行列を持つことです。しかし、私はtf.Variableを再度使用したくはありません。これは、行列自体を展開していない前の行列の値をコピーしてメモリを浪費するためです。値を複製せずにテンソルフロー内の行列を拡大するには?

私は、人々がvalidate_shapeをfalseに設定してtf.assignを使用しているのを見ましたが、これはバグだと信じていた変数の形を正しく変更しませんでしたが、テンソルフローGitHubは、なぜ彼らのreplyから理解できません)。

以下は、問題の簡略化した例です。 xは、zに追加できるように展開したい行列です。誰もが、私は、私は非常に感謝される、ここで達成しようとしています何の解決策=)

import tensorflow as tf 
import numpy as np 

# Initialise some variables 
sess = tf.Session() 
x = tf.Variable(tf.truncated_normal([2, 4], stddev = 0.04)) 
z = tf.Variable(tf.truncated_normal([3, 4], stddev = 0.04)) 
sess.run(tf.variables_initializer([x, z])) 

# Enlarge the matrix by assigning it a new set of values 
sess.run(tf.assign(x, tf.concat((x, tf.cast(tf.truncated_normal([1, 4], stddev = 0.04), tf.float32)), 0), validate_shape=False)) 

# Print shapes of matrices, notice that x's actual shape is different for the 
# shape tensorflow has recorded for it 
print(x.get_shape()) 
print(x.eval(session=sess).shape) 
print(z.get_shape()) 
print(z.eval(session=sess).shape) 

# Add two matrices with equal shapes 
print(tf.add(x, z).eval(session=sess)) 
を知っている場合:私は、私は形(2、4にzの初期化と、その実現します)そしてそれをtf.assign(xと同様に)で展開すると上記の例がうまくいきます。しかし、別の制約のために、私はzの元の形状を制御することはできません。

答えて

0

テンソルフローのテンソルは不変なので、簡単にスケールを変更することはできません。大きなパッド入りのマトリックスの中に「部分行列」をもたらすために、ここで示したようにあなたが)0でパッドにしようとした後、(tf.gatherとマトリックスの部分にアクセスすることができます

How to select rows from a 3-D Tensor in TensorFlow?

。しかしこれは簡単で優雅な解決策ではないようです。

関連する問題