TensorFlow のチュートリアルでは、作成時にテンソルの形状を指定する必要があると書かれています。その形状は自動的にテンソルの形状になります。また、TensorFlow は変数を再形成するための高度なメカニズムを提供するとも述べています。どうやってやるの?コード例はありますか?
6 に答える
クラスを使用tf.Variable
して変数を作成することをお勧めしますが、作成後に変数の形状を変更する機能が制限されます。
変数の形状を変更する必要がある場合は、次のようにします (たとえば、32 ビット浮動小数点テンソルの場合)。
var = tf.Variable(tf.placeholder(tf.float32))
# ...
new_value = ... # Tensor or numpy array.
change_shape_op = tf.assign(var, new_value, validate_shape=False)
# ...
sess.run(change_shape_op) # Changes the shape of `var` to new_value's shape.
この機能は文書化されたパブリック API には含まれていないため、変更される可能性があることに注意してください。この機能を使用する必要がある場合はお知らせください。今後のサポート方法について調査いたします。
TensorFlow ドキュメントの shape -and-shapingをご覧ください。利用可能なさまざまな形状変換について説明します。
最も一般的な関数はおそらくtf.reshapeで、これは numpy に相当するものに似ています。要素の数が同じである限り、任意の形状を指定できます。ドキュメントにはいくつかの例があります。
tf.Variable(tf.placeholder(tf.float32))
tensorflow 1.2.1 では有効ではありません
Pythonシェルで:
import tensorflow as tf
tf.Variable(tf.placeholder(tf.float32))
あなたは得るでしょう:
ValueError: initial_value must have a shape specified: Tensor("Placeholder:0", dtype=float32)
更新: を追加validate_shape=False
すると、エラーは発生しません。
tf.Variable(tf.placeholder(tf.float32), validate_shape=False)
tf.py_func
あなたの要件に一致する場合:
def init():
return numpy.random.rand(2,3)
a = tf.pyfun(init, [], tf.float32)
独自の init 関数を渡すことで、任意の形状の変数を作成できます。
別の方法:
var = tf.get_varible('my-name', initializer=init, shape=(1,1))
またはnumpy配列を返すtf.constant
任意の関数を渡すことができます。init
指定された形状は検証されません。出力形状は実際のデータ形状です。