据我所知,模型的参数不放到优化器中是不能训练的,但是最近我在github上运行一个项目的时候,发现模型的参数不放到优化器中也可以训练,这个项目给优化器添加参数的代码地址是https://github.com/zjunlp/HVPNeT/blob/main/modules/train.py#L500。
def multiModal_before_train(self):
# bert lr
parameters = []
params = {'lr':self.args.lr, 'weight_decay':1e-2}
params['params'] = []
for name, param in self.model.named_parameters():
if 'bert' in name:
params['params'].append(param)
parameters.append(params)
# prompt lr
params = {'lr':self.args.lr, 'weight_decay':1e-2}
params['params'] = []
for name, param in self.model.named_parameters():
if 'encoder_conv' in name or 'gates' in name:
params['params'].append(param)
parameters.append(params)
# crf lr
params = {'lr':5e-2, 'weight_decay':1e-2}
params['params'] = []
for name, param in self.model.named_parameters():
if 'crf' in name or name.startswith('fc'):
params['params'].append(param)
self.optimizer = optim.AdamW(parameters)
for name, par in self.model.named_parameters(): # freeze resnet
if 'image_model' in name: par.requires_grad = False
self.scheduler = get_linear_schedule_with_warmup(optimizer=self.optimizer,
num_warmup_steps=self.args.warmup_ratio*self.train_num_steps,
num_training_steps=self.train_num_steps)
self.model.to(self.args.device)
可以发现crf和fc的参数被添加到params中,而不是参数中。但它们仍然可以训练,有人知道为什么吗?
1条答案
按热度按时间um6iljoc1#
该模型基于提示学习,如果训练了提示,则可以在不训练分类器的情况下训练分类器。