我有一個擁抱臉模型:
model_name = 'bert-base-uncased'
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=1).to(device)
如何更改默認分類器頭?因為它只是一個線性分類器。我在 huggingface github 中發現了這個問題,上面寫著:
您也可以將 self.classifier 替換為您自己的模型。
model = BertForSequenceClassification.from_pretrained("bert-base-multilingual-cased") model.classifier = new_classifier其中 new_classifier 是您想要的任何 pytorch 模型。
但是,我無法弄清楚它的結構new_classifier應該是什么樣子(特別是輸入和輸出,以便它可以處理批處理)。
uj5u.com熱心網友回復:
通過查看此處的 BertForSequenceClassification 的源代碼,您可以看到分類器只是一個線性層,將 bert 輸出從 hidden_??size 維度投影到 num_labels 維度。假設您想將線性分類器更改為帶有 Relu 激活的兩層 MLP,您可以執行以下操作:
new_classifier = nn.Sequential(
nn.Linear(config.hidden_size, config.hidden_size *2),
nn.ReLU(),
nn.Linear(config.hidden_size * 2, config.num_labels)
)
model.classifier = new_classifier
你的新分類器的結構要求是它的輸入維度和輸出維度需要是 config.hidden_??size 維度和 config.num_labels 相應。分類器的結構不依賴于批量大小,像 nn.Linear 這樣的模塊將 (*, H_dimension) 維度作為輸入,因此您在創建新分類器時不需要指定批量大小。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/511431.html
