2016-12-01 5 views
1

私は入力データに対してx = tf.placeholder("float", shape=[None, 784])を定義しました。後で、バッチサイズとしてxという形の最初の値を知る必要があります。そして私はx.get_shape().as_list()[0]で値を抽出しますが、私はNoneを得ました。どうすれば適切に抽出するのか教えてください。どうもありがとう!TensorflowのプレースホルダTensorの形状値を抽出する方法は?

編集:

私は今tf.get_shape()を使用しているが、それは別のバグを引き起こします。私は、このような方法で、intbatch_sizeを設定した場合

def deconv(X, W, b, output_shape): 
    X += b 
    return tf.nn.conv2d_transpose(X, W, output_shape, strides=[1, 1, 1, 1]) 

:私のコードでは、私はdeconv funcitonを定義しているbatch_size = 50deconv機能の呼び出しは、次のようにうまく機能:

W_conv2_T = tf.ones([5, 5, 32, 64]) 
pool1_tr = deconv(conv2_tr, W_conv2_T, tf.zeros([64]), [batch_size, 14, 14, 32]) 

conv2_trの形状は[50, 14, 14, 64]です。 pool1_trの結果の形状は[50, 14, 14, 32]です。しかし、batch_size = tf.get_shape(x)[0]に設定した場合、conv2_trの形状は[None, 14, 14, 64]であり、結果として得られる形状はpool1_trであり、[None, None, None, None]になります。このバグはとても奇妙です。この問題で私を助けてくれますか?前もって感謝します!

答えて

4

プレースホルダ内の行数のためNoneの値は、あなたがtf.Tensorような形状を得るためにtf.shape(x)を使用しなければならないので、それは、実行時に変わることを意味します。次のコードは動作するはずです:

batch_size = tf.shape(x)[0] 
+0

お返事ありがとうございます!残念ながら私は別の関連した奇妙なバグを得ました。私は質問を編集し、さらに詳しい情報を追加しました。これを見て、私を助けてください。ありがとう! – southdoor

+1

'tf.nn.conv2d_transpose()'の形状推定がかなり弱いようです。 (そして私が書いたように見えます:P)それを注意してくれてありがとう - 私たちは修正を準備し、その間にあなたはその形状の既知の寸法で 'pool1_tr.set_shape() 'を呼び出すことができます。 – mrry

関連する問題