Tensorflow:在conv2D_transpose中的output_shape中使用None

时间:2016-11-16 09:54:00

标签: python python-2.7 machine-learning tensorflow

我想在我的网络中使用conv2d_tranpose(或解卷积)代替上采样。 这需要将output_shape传递给函数调用。这不是问题,我可以计算出来。但是我想在batch_size中使用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

  

TypeError:预期的二进制或unicode字符串,得到无

如果我只是省略第一个维度:

  

ValueError:output_shape必须具有shape(4,),got(3,)

我觉得奇怪的是有不同的方法来处理batch_size。有些操作只是忽略它,比如普通的conv2d,但在这里我需要明确指定它。 无论如何,我想知道为什么我自己必须自己计算output_shape。使用给定的输入,步幅,填充,应该易于计算。 关于output_shape的推断有一个github issue,遗憾的是似乎没有任何跟进。

我这样做是正确的 - 在output_shape中传递一个明确的batch_size吗? 有没有办法省略显式的batch_size

1 个答案:

答案 0 :(得分:3)

请使用下面的符号表示,而不是使用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()略有不同。

另请参阅tensorflow网站中关于变量批量大小的建议。

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