↓阿里云服务器3年不到300元↓

Tomcat 架构解析 阿里云服务器3年不到300元 Redis设计与实现

PyTorch BERT TypeError:forward()获得意外的关键字参数“labels”

  • 问题:
  • 使用Pythorch transformers训练BERT模型(遵循教程here)一

    本教程中的以下语句

    loss = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels)

    导致

    TypeError: forward() got an unexpected keyword argument 'labels'

    这是全部错误

    TypeError                                 Traceback (most recent call last)
    <ipython-input-53-56aa2f57dcaf> in <module>
    26 optimizer.zero_grad()
    27 # Forward pass
    ---> 28 loss = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels)
    29 train_loss_set.append(loss.item())
    30 # Backward pass

    ~/anaconda3/envs/systreviewclassifi/lib/python3.6/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
    539 result = self._slow_forward(*input, **kwargs)
    540 else:
    --> 541 result = self.forward(*input, **kwargs)
    542 for hook in self._forward_hooks.values():
    543 hook_result = hook(self, input, result)

    TypeError: forward() got an unexpected keyword argument 'labels'

    我似乎不知道forward()函数需要什么样的参数

    还有一个类似的问题here,但我仍然不知道解决办法是什么

    系统信息:

  • 答案:
  • 据我所知,BertModel在forward()函数中不接受标签。看看forward函数参数

    我怀疑您正在尝试为序列分类任务微调BertModel,而API提供了一个类BertForSequenceClassification. 如您所见,它的forward()函数定义:

    def forward(self, input_ids, attention_mask=None, token_type_ids=None,
    position_ids=None, head_mask=None, labels=None):

    请注意,forward()方法返回以下内容

    Outputs: `Tuple` comprising various elements depending on the configuration (config) and inputs:
    **loss**: (`optional`, returned when ``labels`` is provided) ``torch.FloatTensor`` of shape ``(1,)``:
    Classification (or regression if config.num_labels==1) loss.
    **logits**: ``torch.FloatTensor`` of shape ``(batch_size, config.num_labels)``
    Classification (or regression if config.num_labels==1) scores (before SoftMax).
    **hidden_states**: (`optional`, returned when ``config.output_hidden_states=True``)
    list of ``torch.FloatTensor`` (one for the output of each layer + the output of the embeddings)
    of shape ``(batch_size, sequence_length, hidden_size)``:
    Hidden-states of the model at the output of each layer plus the initial embedding outputs.
    **attentions**: (`optional`, returned when ``config.output_attentions=True``)
    list of ``torch.FloatTensor`` (one for each layer) of shape ``(batch_size, num_heads, sequence_length, sequence_length)``:
    Attentions weights after the attention softmax, used to compute the weighted average in the self-attention heads.

    希望这有帮助!在

C++ Primer Plus 第六版 阿里云服务器3年不到300元 流畅的 Python