GPT2: `register_forward_hook` и `output_hidden_state` давали разные выходные данные промежуточного уровня.Python

Программы на Python
Ответить
Anonymous
 GPT2: `register_forward_hook` и `output_hidden_state` давали разные выходные данные промежуточного уровня.

Сообщение Anonymous »

Я хочу вывести 20-й блок GPT2Block в средней модели GPT2 (всего 24 блока GPT2Block). Я использовал Register_forward_hook и output_hidden_state отдельно, но они дают разные результаты.
Мой код выглядит следующим образом:

Код: Выделить всё

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoConfig

model_config = AutoConfig.from_pretrained('gpt2-medium', output_hidden_states=True,  return_dict_in_generate=True)
model = AutoModelForCausalLM.from_pretrained('gpt2-medium', config=model_config).cuda()

# define hook
def hook(module, fea_in, fea_out):  # collect output
nonlocal features_in_hook
features_in_hook = fea_out.clone().detach()
return fea_out

model.eval()  # turn dropout and layernorm into eval mode
features_in_hook = None  # to save output
for (name, module) in model.named_modules():
if name == 'transformer.h.19.mlp.dropout':
h = module.register_forward_hook(hook=hook)

prompt_tok = tok(["Who are you?", "What university are you in?"], padding=True, return_tensors="pt").to("cuda")
hidden_state = model(**prompt_tok)[2][20]
Документация по выходному_скрытому_состоянию находится здесь.
Если я все сделал правильно, скрытое_состояние должно быть таким же, как Features_in_hook. Поскольку длина model(**prompt_tok)[2] равна 25, а первый — встраивание слов, выходные данные 20-го блока должны иметь индекс 20. Однако два результата, полученные разными способами, не являются такой же. Я сделал что-то не так?
Ссылка: использование Register_forward_hook и output_hidden_state.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -outputs-o
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»