PaddlePaddle PaddleClas动转静的一个槽点

PaddleClas的配置说明中说可以通过to_static进行自动动态图转静态图,打开该开关的时候却发生了如下错误

File "model.py", line 174, in forward
        x = getattr(self, name)(x)
        print(x.shape)
        x = F.adaptive_avg_pool2d(x, (1, 1)).reshape((x.shape[0], -1))
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <--- HERE
        x = self.classifier(x)
        return x

打印出x的shape才发现

(-1, 1024, 7, 7)

原来,PaddlePaddle在编译静态图中,需要使用一个伪数据来获得网络的输入输出形状(类似于TensorFlow 1.x中的InputSpec,或者MATLAB Coder中的输入矩阵)。而PaddleClas套件生成的伪数据第一维(batch维)为 − 1 -1 1,这就造成了reshape被输入了两个 − 1 -1 1

解决方案:使用x.flatten(1)代替x.reshape(x.shape[0], -1)

思考:如果我要使用的是x.reshape(x.shape[0], x.shape[1], -1),就不能简单用flatten函数了,这种情况我除了手动计算输出张量的大小实在没想出好办法。


幸好保存了在MobaXTerm中设置保存了Session Log,得以找到详细的报错信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值