私がしようとしているのは、サイズが大きくなる(つまり、ニューロンが各繰り返しに追加される)ニューラルネットワークの重み行列を持つことです。しかし、私は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の元の形状を制御することはできません。