You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Keras的Matchzoo训练后,无法读取history字典特定键值的问题求助

问题分析与解决办法

核心原因

你遇到的问题本质是Python变量名和字典字符串键的混淆:

  • 当你直接写history.history[normalized_discounted_cumulative_gain@3(0.0)]时,Python会把这段内容当成可执行代码——它试图调用名为normalized_discounted_cumulative_gain的函数,还用到了不合法的@语法,自然会抛出NameError。
  • 而loss能正常用history.history['loss']访问,是因为你用字符串引号把键包裹起来,Python才明确这是要查找字典里的字符串键。

至于打印history.history.keys()时看起来没有引号,只是Python控制台的显示优化:对于包含特殊字符(比如@、())的字符串键,控制台打印dict_keys对象时可能省略引号,但这些键本质上都是字符串类型。

解决办法

访问这些特殊指标键时,必须把键名用单引号或双引号包裹起来,比如:

# 正确访问方式
history.history['normalized_discounted_cumulative_gain@3(0.0)']
history.history['mean_average_precision(0.0)']

需要检查的内容

  1. 确认键的准确字符串形式:
    可以把字典键转换成列表,查看完整的字符串内容,避免手动输入时写错:
    print(list(history.history.keys()))
    
    输出会明确显示每个键都是带引号的字符串,比如:
    ['loss', 'normalized_discounted_cumulative_gain@3(0.0)', 'normalized_discounted_cumulative_gain@5(0.0)', 'mean_average_precision(0.0)']
    
  2. 严格匹配键的字符:
    注意指标名称里的@、括号、小数点、大小写(Matchzoo的指标名通常是小写)都要完全一致,哪怕多一个空格或者少一个符号都会导致KeyError。
  3. 检查回调函数的指标配置:
    如果你自定义了评估回调,确认回调里指定的指标名称和训练输出的名称一致,避免因配置错误导致键名不匹配。

内容的提问来源于stack exchange,提问作者June Yoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:48:52