python - 在评估 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 非常陌生。任何帮助表示赞赏。
解决方案
推荐阅读
- python - python 装饰的数据类方法为所有实例共享
- complexheatmap - 复杂热图中的 anno_text 函数,如何在顶部命名行注释?
- algorithm - 分而治之是否总是导致多项式成本?
- unity3d - 时滞统一和光子
- php - 如何在 SonataAdminBundle 中自定义导出
- assembly - 我无法在链接描述文件中指定 Rust 程序的起始偏移量是否有原因?
- sql-server - 在 WITH SCHEMABINDING 视图中使用别名会导致错误
- c# - Razor 页面路由到默认页面的问题
- testrail - 如何将日期字段从 csv 上传到 TestRail
- java - 我怎样才能要求 intellj 重新索引