2016-11-16 3 views
4

ネットワークでアップサンプリングの代わりにconv2d_tranpose(またはデコンボリューション)を使用したいと思います。 これは、output_shapeを関数呼び出しに渡す必要があります。それは問題ではない、私はそれを計算することができます。しかし、batch_sizeにNoneを指定して、設定を柔軟に保ちたい。 これは可能ですか?ここでTensorflow:conv2D_transposeのoutput_shapeにnoneを使用

は、コードの行です:

tf.nn.conv2d_transpose(hd_conv1, Wd_conv1, [batch_size, 14,14,64], strides=[1,2,2,1], padding="SAME") 

batch_sizeは単に、私は私のスクリプトの先頭に設定された変数です。このコードは正常に動作が、私はNone代わりのbatch_sizeを使用している場合:私はそれに対処するさまざまな方法があることを奇妙だと思う

ValueError: output_shape must have shape (4,), got (3,)

TypeError: Expected binary or unicode string, got None

は、私はちょうど最初の次元を除外した場合batch_sizeいくつかの操作は通常のconv2dのように単純に無視しますが、ここでは明示的に指定する必要があります。 いずれにしても、なぜ自分自身でoutput_shapeを計算しなければならないのだろうと思っていました。与えられた入力、ストライド、パディング、それは簡単に計算する必要があります。 output_shapeの推論に関してgithub issueがありますが、残念ながらフォローアップがないようです。

私はoutput_shapeの明示的なbatch_sizeにこの権利を渡していますか? batch_sizeを明示的に省略する方法はありますか?

+0

githubの問題にはいくつかの説明があります。あなたがそれを取得しない場合は、ちょうどそこにフォローアップ。 – yuefengz

答えて

2

Noneを使用する代わりに、次のような記号表現を使用してください。

batch_size = tf.shape(something_or_other)[0] 
deconv_shape = tf.pack([batch_size, 40, 40, 32]) 
conv2d_transpose(..., output_shape=deconv_shape, ...) 

tf.get_shape()には注意してください。 tf.get_shape()tf.shape()は少し異なります。

可変バッチサイズについては、テンソルフローサイトの勧告も参照してください。

https://www.tensorflow.org/programmers_guide/faq

関連する問題