我想在我的网络中使用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] 举报,一经查实,本站将立刻删除。