[报错]ValueError: Incompatible shapes between op input and calculated input gradient. conv2d_transpose

ValueError: Incompatible shapes between op input and calculated input gradient. Forward operation: deconv1d/conv2d_transpose.

Date: 2019.12.29

Author: Xin Pan


问题

ValueError: Incompatible shapes between op input and calculated input gradient.  Forward operation: deconv_block_128/deconv1d/conv2d_transpose.  Input index: 2. Original input shape: (512, 11, 14, 256).  Calculated input gradient shape: (512, 11, 24, 256)

看起来这个问题是说conv2d_transpose的输入和计算(input)的输入梯度(input gradient)之前存在不匹配的问题。

解决

经过尝试之后解决这个问题很简单。首先看这个函数:

tf.nn.conv2d_transpose(
    value,
    filter,
    output_shape,
    strides,
    padding='SAME',
    data_format='NHWC',
    name=None
)

我们需要让value经过filter卷积之后的尺寸和output_shape一致即可。在问题中我的value在图的编译阶段是[512,11,24,256],output_shape也是[512,11,24,256]。它们是匹配的,但是当用sess.run()运行的时候我input的尺寸变成了[512,11,14,256]。这时候就出现了上边的问题。那么解决这个问题就是改正:

  1. filter的尺寸;
  2. strides;
  3. padding=“SAME” ->padding=“VALID”

以上方式任选或者几个方式的组合,都可以解决。这样问题就可以解决了。

详细推理

在用tensorflow-gpu==1.12.0 写一个反卷积的程序。上网搜索了一下tensorflow里边的反卷积用tf.nn.conv2d_transpose实现的。看了下tensorflow官网上的解释,只是说这个函数能起到类似的作用,但是和反卷积并不完全一致(具体的推理还未深究,下周研究一下)

tf.nn.conv2d_transpose(
    value,
    filter,
    output_shape,
    strides,
    padding='SAME',
    data_format='NHWC',
    name=None
)

这个函数的几个参数,value 是输入,filter是需要使用的卷积核,strides是滑动的步长,padding是边界的处理方式,

最关键的就是output_shape这个参数,而且这个参数是必不可少的。我看到网上一些文章说可以将output_shape的第一维度改成-1或是None就是变成[-1(None), 22,33,4]这样,但是这个方法在conv2d_transpose中是行不通的。

Reference

谷歌API文档

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值