我想在我的网络中使用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
?
答案 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网站中关于变量批量大小的建议。