请提出你的问题 Please ask your question
通过stop_gradient=True冻结backbone权重,但是所有通过对比训练结果params文件和加载的params文件,发现所有的mean和variance参数都改变了
{
model_state_dict = model.state_dict()
num_params_loaded = 0
for k in model_state_dict:
if k == 'neck.conv1.weight':
break
model_state_dict[k].stop_gradient = True
}
3条答案
按热度按时间weylhg0b1#
你好。我这里通过你的写法是可以正常冻结权重更新的,可以确认一下自己的写法,或者提供一下最小复现单测呢?
9bfwbjaz2#
你好,我这边使用上述方法冻结权重的时候,weight和bias权重是可以正常冻结的,但是BN层的mean和variance都会改变
xwmevbvl3#
Paddle/python/paddle/nn/layer/norm.py
Line 970 in 1cea578
| | self._mean.stop_gradient=True |
从源码里看到 BN 的 mean 与 variance 在构造时 stop_gradient 即为 True。能否打印一下 mean 和 variance 和stop gradient 属性确认一下呢?