OFA-Sys / Chinese-CLIP

Chinese version of CLIP which achieves Chinese cross-modal retrieval and representation generation.
MIT License
4.51k stars 464 forks source link

如何冻结text_encoder模型的权重? #180

Open Derek-Kun opened 1 year ago

Derek-Kun commented 1 year ago

我想用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

DtYXs commented 1 year ago

您好,不知道冻结text_encoder效果如何,我理解除了冻结tokenizer可能是不必要的外没什么问题