【问题标题】:Tensorflow: use None in output_shape in conv2D_transposeTensorflow:在conv2D_transpose的output_shape中使用None
【发布时间】:2016-11-16 09:54:00
【问题描述】:

我想在我的网络中使用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 must have shape (4,), got (3,)

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

我这样做对吗 - 在 output_shape 中传入明确的 batch_size ? 有没有办法省略显式的 batch_size

【问题讨论】:

  • github问题有一些解释。如果你不明白,就在那边跟进。

标签: python python-2.7 machine-learning tensorflow


【解决方案1】:

不要使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多