首页 > 解决方案 > 在评估 GPT2 模型时计算损失和困惑,即使没有定义

问题描述

当我尝试为文本生成任务评估 GPT2 模型时,我在代码中打印了如下所示的损失和困惑,但我没有在代码中定义它。

with torch.no_grad():

    for _ in range(length):
        outputs = model(generated)
        next_token_logits = outputs[0][:, -1, :] 
        next_token = torch.multinomial(F.softmax(next_token_logits, dim=-1), num_samples=1) 

        generated = torch.cat((generated, next_token), dim=1)

print(f"loss {loss}")
print(f"perplexity {perplexity}")

...

输出的一部分:

loss 3.644557237625122
perplexity 38.26582717895508

这会打印出非常真实的 loss 和 perplexity 值,我不确定这是从哪里来的,因为如果我将其更改为 loss1 和 perplexity1 它会给我这个错误

     38 
---> 39 print(f"loss {loss1}")
     40 print(f"perplexity {perplexity}")
     41 
NameError: name 'loss1' is not defined

虽然在这里,对于每一代人来说,损失和困惑都会是一样的。

所以,我很困惑这是如何自动计算的,并且希望得到一些澄清,因为我对 Pytorch 和 ML 非常陌生。任何帮助表示赞赏。

标签: pythonnlppytorchhuggingface-transformers

解决方案


推荐阅读