MXNET踩坑记——stale梯度

UserWarning: Gradient of Parameter “growcascadeforest0_cascadelayer1_randomforest0_fcmodel0_sequential0_dense0_weight” on context gpu(0) has not been updated by backward since last `step`. This could mean a bug in your model that maked it only use a subset of the Parameters (Blocks) for this iteration. If you are intentionally only using a subset, call step with ignore_stale_grad=True to suppress this warning and skip updating of Parameters with stale gradient

说明

这个是个很常见的错误,它的意思是有参数不会被更新,换句话说,可能在计算出那个用于backward的变量的过程中,没有遇到某些参数
这其实不算是个错误,某些特殊的模型,比如我做的某个实验,还就是这么训练的,但一般来说,出现这个意味着模型存在bug,可能是手误多写了一些参数或者计算时少考虑了一些参数,但是也有些非常不容易发现的问呢提,例如因为同义方法导致的“断链”

concatenate 和concat

这个最典型,只要在计算过程中用了concatenate方法,就会出现上面的错误,而用concat方法不会,
原因是concatenate不属于一个op,虽然这两个方法是同义的(参数名字有点差异)但是本质差别很大,从pycharm的代码提示里可以看到,concat方法在gen_op.py这个文件里,而concatenate这个方法在ndarray.py这个文件里,而只有在gen_op里的函数才能作为计算图的一个节点被记录下来,一旦用了concatenate方法,一定会出现以上错误

总结

总之 如果遇到这个问题,检查所有用到的ndarray的函数 看它们是不是在gen_op这个文件里,如果不在就找一个替代,如果没有,那就自己写一个,或者你也可以去改mxnet的C++源码 ,添加自己的op

你可能感兴趣的:(MXNET踩坑记——stale梯度)