首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何微调BERT模型?

如何微调BERT模型?
EN

Stack Overflow用户
提问于 2021-03-11 04:27:38
回答 1查看 274关注 0票数 0
代码语言:javascript
复制
    class BertClassifier(nn.Module):
    #Bert Model for Classification Tasks.
    
    def __init__(self, freeze_bert=False):
        """
        @param    bert: a BertModel object
        @param    classifier: a torch.nn.Module classifier
        @param    freeze_bert (bool): Set `False` to fine-tune the BERT model
        """
        super(BertClassifier, self).__init__()
        # Specify hidden size of BERT, hidden size of our classifier, and number of labels
        D_in, H, D_out = 768, 50, 2

        # Instantiate BERT model
        self.bert = BertModel.from_pretrained('bert-base-uncased')

        # Instantiate an one-layer feed-forward classifier
        self.classifier = nn.Sequential(
            nn.Linear(D_in, H),
            nn.ReLU(),
            #nn.Dropout(0.5),
            nn.Linear(H, D_out)
        )

        # Freeze the BERT model
        if freeze_bert:
            for param in self.bert.parameters():
                param.requires_grad = False

我想知道,如果我们调用bert_classifier = BertClassifier(freeze_bert=False),这意味着我们没有冻结权重,那么这是否意味着我们正在微调?如果我错了,请纠正我。

EN

回答 1

Stack Overflow用户

发布于 2021-03-12 18:14:26

微调通常意味着您将模型权重与特定于任务的层(例如,BERT上的线性层(或其他分类体系结构)用于分类任务)一起更新。因此,一般来说,您不应该冻结权重。从此以后,使用bert_classifier = BertClassifier(freeze_bert=False)进行微调是合适的。

补充说明:在实践中,有些人选择在训练任务特定层时不更新BERT模型权重(这反过来又减少了对巨大计算能力的需求)。这里,我们可以考虑使用BERT模型来提取特征或嵌入。在这种情况下,您可以使用freeze_bert=True。一些人更新了顶部几层的BERT模型权重。这完全取决于你到底想做什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66572377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档