Pytorch 在bert上增加卷积层

Pytorch 在bert上增加卷积层,pytorch,conv-neural-network,bert-language-model,Pytorch,Conv Neural Network,Bert Language Model,我试图通过插入CNN层来微调预先训练好的伯特模型。 但是在控制卷积层输入的大小方面有困难。 这是我的伯特分类器代码 class BERTClassifier(nn.Module): def __init__(self, bert, hidden_size = 768, kernel_size = 3, num_classes=2,

我试图通过插入CNN层来微调预先训练好的伯特模型。 但是在控制卷积层输入的大小方面有困难。 这是我的伯特分类器代码

class BERTClassifier(nn.Module):
    def __init__(self,
                 bert,
                 hidden_size = 768,
                 kernel_size = 3,
                 num_classes=2,
                 dr_rate=None,
                 params=None):
        super(BERTClassifier, self).__init__()
        self.bert = bert
        self.dr_rate = dr_rate

        self.conv1 = nn.Sequential(
            nn.Conv1d(hidden_size, hidden_size, kernel_size),
            nn.ReLU(),
            nn.MaxPool1d(kernel_size)
        )

        self.classifier = nn.Linear(hidden_size , num_classes)
        if dr_rate:
            self.dropout = nn.Dropout(p=dr_rate)
    
    def gen_attention_mask(self, token_ids, valid_length):
        attention_mask = torch.zeros_like(token_ids)
        for i, v in enumerate(valid_length):
            attention_mask[i][:v] = 1
        return attention_mask.float()

    def forward(self, token_ids, valid_length, segment_ids):
        attention_mask = self.gen_attention_mask(token_ids, valid_length)
        
        _, pooler = self.bert(input_ids = token_ids, token_type_ids = segment_ids.long(), attention_mask = attention_mask.float().to(token_ids.device))
        if self.dr_rate:
            out1 = self.dropout(pooler)
        out2=self.conv1(out1)
        return self.classifier(out2)
这是错误信息

RuntimeError: Expected 3-dimensional input for 3-dimensional weight [768, 768, 3], but got 2-dimensional input of size [64, 768] instead

您应该传递顺序输出,而不是池输出。