当输入相同的图像时,在Google ViT模型中,output.last_hidden_state不等于输出.隐藏状态-1?我在伯特试过,结果是一样的。
ViTFeatureExtractor.from_pretrained('google/vit-base-patch16-224-in21k') = feature_extractor
model = ViTModel.from_pretrained('google/vit-base-patch16-224-in21k')
inputs = feature_extractor(images=[image], return_tensors="pt")
outputs = model(pixel_values=inputs['pixel_values'], output_hidden_states=True)
vec1 = outputs.hidden_states[-1][0, 0, :]
vec2 = outputs.last_hidden_state[0, 0, :]在我看来,vec1应该和vec2一样。但事实是,它们一点也不一样。
发布于 2022-07-31 07:52:23
不同之处在于将分层规范应用于last_hidden_state。
以下是ViTModel前向方法最后15行的摘录。对于分配给sequence_output的last_hidden_state,分层规范应用于编码器的输出。
sequence_output = encoder_outputs[0]
sequence_output = self.layernorm(sequence_output)
pooled_output = self.pooler(sequence_output) if self.pooler is not None else None
if not return_dict:
head_outputs = (sequence_output, pooled_output) if pooled_output is not None else (sequence_output,)
return head_outputs + encoder_outputs[1:]
return BaseModelOutputWithPooling(
last_hidden_state=sequence_output,
pooler_output=pooled_output,
hidden_states=encoder_outputs.hidden_states,
attentions=encoder_outputs.attentions,
)如果将分层范数应用于隐含状态-1,则可以确定得到了相同的值。请参考我在科拉布做的笔记本。拥抱面
https://stackoverflow.com/questions/69084798
复制相似问题