微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – Tensorflow:在conv2D_transpose的output_shape中使用None

我想在我的网络中使用conv2d_tranpose(或deconvolution)而不是upampling.
这需要将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: Expected binary or unicode string, got None

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

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

我认为有很多方法可以处理batch_size.有些操作只是忽略它,比如普通的conv2d,但在这里我需要明确指定它.
无论如何,我想知道为什么我自己必须自己计算output_shape.使用给定的输入,步幅,填充,应该易于计算.
关于output_shape的推断有一个github issue,遗憾的是似乎没有任何后续行动.

我是这样做的 – 在output_shape中传递一个显式的batch_size?
有没有办法省略显式的batch_size?

解决方法:

请使用下面的符号表示,而不是使用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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐