Paddle 使用stop_gradient=True方式冻结权重未成功

yws3nbqq  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(36)

请提出你的问题 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
}

weylhg0b

weylhg0b1#

你好。我这里通过你的写法是可以正常冻结权重更新的,可以确认一下自己的写法,或者提供一下最小复现单测呢?

9bfwbjaz

9bfwbjaz2#

你好,我这边使用上述方法冻结权重的时候,weight和bias权重是可以正常冻结的,但是BN层的mean和variance都会改变

xwmevbvl

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 属性确认一下呢?

相关问题