Pytorch 在bert上增加卷积层
我试图通过插入CNN层来微调预先训练好的伯特模型。 但是在控制卷积层输入的大小方面有困难。 这是我的伯特分类器代码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,
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
您应该传递顺序输出,而不是池输出。