经常听到Pytorch模型中有人讲要固化参数,那么怎么固化参数呢?
“固化”就是固定参数,不要改变的意思。那么参数什么时候会发生改变呢,就是在损失函数对参数求导数的时候,然后参数会更新,那么我们只要阻止参数求导,令其在更新时的改变量为0,即固化参数。
# freeze all transformer weights
for param in self.model.parameters():
param.requires_grad = False
下面是对有些NLP基础的人说的:
一般的用法是把model 换成bert等预训练的词向量,因为我们在使用预训练的词向量的时候有些不需要对词向量进行更新,即不进行finetune,所以使用该代码固定词向量即可。
最好再加一个开关,即由用户自定义是否需要固化参数:
if freeze:
print("Freeze transformer weights")
# freeze all transformer weights
for param in self.model.parameters():
param.requires_grad = False