1

这是变压器 pytorch 库文档中给出的示例

from transformers import BertTokenizer, BertForTokenClassification
import torch

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForTokenClassification.from_pretrained('bert-base-uncased', 
                      output_hidden_states=True, output_attentions=True)

input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute", 
                         add_special_tokens=True)).unsqueeze(0)  # Batch size 1
labels = torch.tensor([1] * input_ids.size(1)).unsqueeze(0)  # Batch size 1
outputs = model(input_ids, labels=labels)

loss, scores, hidden_states,attentions = outputs

hidden_states是一个长度为 13 的元组,包含模型在每层输出的隐藏状态以及初始嵌入输出。我想知道hidden_​​states[0] 或 hidden_​​states[12] 是否代表最终的隐藏状态向量

4

1 回答 1

2

如果您检查源代码,特别是BertEncoder,您可以看到返回的状态被初始化为一个空元组,然后在每个层的每次迭代中简单地附加。

最后一层作为此循环之后的最后一个元素附加,请参见此处,因此我们可以安全地假设它hidden_states[12]是最终向量。

于 2020-03-25T11:54:21.113 回答