当前位置: 代码迷 >> 综合 >> PaddlePaddle PaddleClas动转静的一个槽点
  详细解决方案

PaddlePaddle PaddleClas动转静的一个槽点

热度:10   发布时间:2023-12-05 08:28:12.0

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

File "model.py", line 174, in forwardx = getattr(self, name)(x)print(x.shape)x = F.adaptive_avg_pool2d(x, (1, 1)).reshape((x.shape[0], -1))~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <--- HEREx = 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,得以找到详细的报错信息。

  相关解决方案