PaddlePaddle clone报错的坑

常见错误:

EnforceNotMet: Invoke operator mul error.
Python Callstacks:
File “/opt/conda/envs/python27-paddle120-env/lib/python2.7/site-packages/paddle/fluid/framework.py”, line 1771, in append_op
attrs=kwargs.get(“attrs”, None))
File “/opt/conda/envs/python27-paddle120-env/lib/python2.7/site-packages/paddle/fluid/layer_helper.py”, line 43, in append_op
return self.main_program.current_block().append_op(*args, **kwargs)
File “/opt/conda/envs/python27-paddle120-env/lib/python2.7/site-packages/paddle/fluid/layers/nn.py”, line 334, in fc
“y_num_col_dims”: 1})
File “”, line 3, in multilayer_perceptron

当然这只是错误的一部分,我没有全部粘贴下来

但是这个报错很关键:

Invoke operator mul error

可能很多小伙伴都遇到这样的问题,虽然百度PaddlePaddle框架现在已经越来越流行,但不得不说,和tensorflow、pytorch相比还是远远不够。

用的人少,那么你要是遇到报错,自然就很难找到解决办法。不过今天这个问题我算是解决了,在这里分享给大家,有什么类似问题可以给我留言,也可以抽空给大家解决。

原因分析

不知道大家有没有经常看百度文档,其实里面很多东西对我们是很有帮助的,能帮助我们更快地熟悉PaddlePaddle框架,然后用上免费V100GPU哈哈哈

这里给出链接

https://paddlepaddle.org.cn/documentation/docs/zh/api_cn/fluid_cn/Program_cn.html#program

这个链接明确地说了为什么为出错,好吧,至少是间接的。
这里先附上截图
PaddlePaddle clone报错的坑_第1张图片

clone

clone的功能就是把一个program克隆出来,让我们能够方便地使用而不影响其他的环节。但是呢,可能是Paddle框架内部设计上的问题,有时会出现BUG,这个BUG会导致裁剪失败然后报错。

框架已经开源了,感兴趣的小伙伴可以去看一看。

但是呢,我们没办法去修改,那么就用相应的方法去避免这样的问题。

修改方法

推荐在 append_backward 和执行优化器之前使用 clone(for_test=True)

即把你的clone那一段代码剪切下来,放在optimizer 之前,就不会报错了,如下:

代码示例

import paddle.fluid as fluid
# 我们推荐在使用 Optimizer前使用clone()接口
test_program = fluid.default_main_program().clone(for_test=True)
optimizer = fluid.optimizer.Momentum(learning_rate=0.01, momentum=0.9)
optimizer.minimize()

------------------------- 更新 -----------------------------

其他类似的问题

比如像这种

Invoke operator conv2d error

解决方法是:重启kernel

你可能感兴趣的:(Machine,Learning)