【发布时间】:2020-07-31 20:05:35
【问题描述】:
我正在尝试通过比较令牌嵌入 grad 值来衡量 BERT 的令牌重要性。因此,为了获得毕业生,我复制了 BertModel 的 2.8.0 转发并稍作更改:
huggingface transformers 2.8.0 BERThttps://github.com/huggingface/transformers/blob/11c3257a18c4b5e1a3c1746eefd96f180358397b/src/transformers/modeling_bert.py
代码:
embedding_output = self.embeddings(
input_ids=input_ids, position_ids=position_ids, token_type_ids=token_type_ids, inputs_embeds=inputs_embeds
)
embedding_output = embedding_output.requires_grad_(True) # my code
encoder_outputs = self.encoder(
embedding_output,
attention_mask=extended_attention_mask,
head_mask=head_mask,
encoder_hidden_states=encoder_hidden_states,
encoder_attention_mask=encoder_extended_attention_mask,
)
sequence_output = encoder_outputs[0]
sequence_output.mean().backward() # my code
assert(embedding_output.grad is not None) # my code
Colab 链接:https://colab.research.google.com/drive/1MggBUaDWAAZNuXbTDM11E8jvdMGEkuRD
但它给出了断言错误。我不明白为什么,这对我来说似乎是一个错误。
请帮忙!
【问题讨论】:
-
也许我忽略了它,但您缺少优化器。如果没有优化器,pytorch 不会计算任何梯度。
-
是的,我没有使用任何优化器。但是,torch 自己计算 grad ,AFAIK,检查这些证明行:pastebin.com/ZmYS2rCN
标签: deep-learning pytorch transformer huggingface-transformers