我想用clip做细粒度分类任务,但是效果不是很好,于是就想能冻结text_encoder权重,单独训练vit部分。我参考了visual encoder部分的代码是
for k, v in model.visual.named_parameters():
v.requires_grad = False
我想依照上面的方法分别冻结self.tokenizer, self.bert和 self.text_projection, 但是我对nlp部分的模型不是特别了解,不确定这样改对不对,是否还有其他地方需要更改 ?
for k, v in model.tokenizer.named_parameters():
v.requires_grad = False
for k, v in model.bert.named_parameters()::
v.requires_grad = False
for k, v in model.text_projection.named_parameters()::
v.requires_grad = False
我想用clip做细粒度分类任务,但是效果不是很好,于是就想能冻结text_encoder权重,单独训练vit部分。我参考了visual encoder部分的代码是 for k, v in model.visual.named_parameters(): v.requires_grad = False
我想依照上面的方法分别冻结self.tokenizer, self.bert和 self.text_projection, 但是我对nlp部分的模型不是特别了解,不确定这样改对不对,是否还有其他地方需要更改 ? for k, v in model.tokenizer.named_parameters(): v.requires_grad = False
for k, v in model.bert.named_parameters():: v.requires_grad = False
for k, v in model.text_projection.named_parameters():: v.requires_grad = False
源代码的定义
def encode_text(self, text): pad_index = self.tokenizer.vocab['[PAD]'] attn_mask = text.ne(pad_index).type(self.dtype) x = self.bert(text, attention_mask=attn_mask)[0].type(self.dtype) # [batch_size, seq_length, hidden_size] return x[:, 0, :] @ self.text_projection