我有一个GPT模型
model = BioGptForCausalLM.from_pretrained("microsoft/biogpt").to(device)
字符串
当我把我的批处理发送给它时,我可以得到logits和隐藏状态:
out = model(batch["input_ids"].to(device), output_hidden_states=True, return_dict=True)
print(out.keys())
>>> odict_keys(['logits', 'past_key_values', 'hidden_states'])
型
Logits的形状为
torch.Size([2, 1024, 42386])
型
对应于(batch, seq_length, vocab_length)
如何在最后一层(即在全连接层之后)获得第一个(即dim=0
)令牌的向量嵌入?我想应该是[2, 1024, 1024]
大小
从here看,它应该在last_hidden_state
下,但我似乎无法生成它。out.hidden_states
似乎是一个长度为25
的元组,其中每个元组的维度为[2, 1024, 1024]
。我想知道最后一个是不是我要找的,但我不确定。
1条答案
按热度按时间ozxc1zmp1#
你对
output_hidden_state=True
和观看out.hidden_states
是正确的。这个元素是一个长度为25的元组。根据BioGPT paper和HuggingFace文档,您的模型包含24个Transformer层,元组中的25个元素是第一个嵌入层输出和24个层中每个层的输出。每个Tensor的形状是
[B, L, E]
,其中B
是批量大小,L
是输入的长度,E
是嵌入的维数。看起来你正在将你的输入填充到1024关于你所指示的形状。因此,第一个标记的表示(在第一个批处理句子中)将是out.hidden_states[k][0,0,:]
,其形状为[1024]
。在这里,k
表示您想要使用的层,由您决定您想要使用哪个层,具体取决于您将如何使用它。