我看到一些github评论说,模型()调用的损失的输出以困惑的形式出现:https://github.com/huggingface/transformers/issues/473
但当我看相关代码时..。https://huggingface.co/transformers/_modules/transformers/modeling_openai.html#OpenAIGPTLMHeadModel.forward
if labels is not None:
# Shift so that tokens < n predict n
shift_logits = lm_logits[..., :-1, :].contiguous()
shift_labels = labels[..., 1:].contiguous()
# Flatten the tokens
loss_fct = CrossEntropyLoss()
loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))
outputs = (loss,) + outputs
return outputs # (loss), lm_logits, (all hidden states), (all attentions)
我看到交叉熵正在计算,但没有转化为困惑。损失最终会在哪里改变呢?还是已经有了我不理解的转变?
发布于 2020-03-24 15:33:41
好吧,我找到答案了。代码实际上是返回交叉熵。在github评论中,他们说是perplexity...they,因为OP说
return math.exp(loss)
它将熵转化为困惑:)
发布于 2022-03-02 13:33:56
没有乳胶没问题。顾名思义,困惑(三元组)是:
PP(p) = e^(H(p))
其中H代表混沌(古希腊语:χάος)或熵。在一般情况下,我们有交叉熵:
PP(p) = e^(H(p,q))
E是对数的自然基,这是PyTorch倾向于计算熵和交叉熵的方法。
https://stackoverflow.com/questions/60832547
复制相似问题