【发布时间】:2021-03-22 08:43:36
【问题描述】:
我实现了我的自定义 Bert 二进制分类模型类,方法是在 Bert 模型(附在下面)之上添加一个分类器层。但是,当我使用官方的 BertForSequenceClassification 模型进行训练时,准确度/指标有很大不同,这让我怀疑我是否在课堂上遗漏了一些东西。
我有几个疑问:
在加载官方BertForSequenceClassificationfrom_pretrained 时,分类器的权重是从预训练模型中初始化的还是随机初始化的?因为在我的自定义类中它们是随机初始化的。
class MyCustomBertClassification(nn.Module):
def __init__(self, encoder='bert-base-uncased',
num_labels,
hidden_dropout_prob):
super(MyCustomBertClassification, self).__init__()
self.config = AutoConfig.from_pretrained(encoder)
self.encoder = AutoModel.from_config(self.config)
self.dropout = nn.Dropout(hidden_dropout_prob)
self.classifier = nn.Linear(self.config.hidden_size, num_labels)
def forward(self, input_sent):
outputs = self.encoder(input_ids=input_sent['input_ids'],
attention_mask=input_sent['attention_mask'],
token_type_ids=input_sent['token_type_ids'],
return_dict=True)
pooled_output = self.dropout(outputs[1])
# for both tasks
logits = self.classifier(pooled_output)
return logits
【问题讨论】:
标签: pytorch huggingface-transformers