2016-03-07 13 views
6

私は私のすべての入力が可変のバッチサイズを受け入れるために、フォームのtensorflow定数

tf.placeholder(tf.float32, shape=(None, ...) 

あり、可変のバッチサイズを持っています。しかし、可変バッチサイズを使用して定数値を作成する方法はありますか?問題は、この行を次のとおりです。

log_probs = tf.constant(0.0, dtype=tf.float32, shape=[None, 1]) 

それは私にエラーを与えている:

TypeError: unsupported operand type(s) for *: 'NoneType' and 'int' 

私はそうかもしれない方法、可変のバッチサイズで定数テンソルを初期化することが可能であると確信しています?私はまた、次のことを試してみた

tf.constant(0.0, dtype=tf.float32, shape=[-1, 1]) 

私はこのエラーを取得する:

ValueError: Too many elements provided. Needed at most -1, but received 1 
+1

"tf.constant"は配列を明示的に構成し、次元を知る必要があります。しかし、多くのテンソルフローが放送をサポートしているので、代わりにそれを使うことができますか? http://docs.scipy.org/doc/numpy-1.10.1/user/basics.broadcasting.html –

答えて

13

tf.constant()は、グラフ構築時にサイズと値を固定しているので、それはおそらくではありませんあなたのアプリケーションに適しています。

テンソルをすべての要素に対して同じ(定数)値で作成する場合は、tf.fill()tf.shape()を使用して、適切な形状のテンソルを作成できます。例えば、inputと同じ形状とどこにでも値0.5持つテンソルt作成するには:Yaroslav mentions in his commentとして

input = tf.placeholder(tf.float32, shape=(None, ...)) 

# `tf.shape(input)` takes the dynamic shape of `input`. 
t = tf.fill(tf.shape(input), 0.5) 

を、あなたはまた、動的な形状のテンソルをマテリアライズ避けるために(NumPy-style) broadcastingを使用することができます。たとえば、inputの形状が(None, 32)で、tの形状が(1, 32)の場合、はtinputの形に合わせてブロードキャストします。

+0

形状をバッチサイズのみに依存させたい場合はどうすればよいですか? batch_sizeがNoneである、形の入力テンソル '(batch_size、height、width、num_channels)'があるとします。私は値 'height'で埋め込まれたテンソルの形状'(batch_size) 'を作成したいと思います。 –

+0

同じ方法を使用できます: 'height_vector = tf.fill(tf.shape(input_tensor)[0:1]、tf.shape(input_tensor)[1])'。 – mrry