基于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)']
需要检查的内容
- 确认键的准确字符串形式:
可以把字典键转换成列表,查看完整的字符串内容,避免手动输入时写错:
输出会明确显示每个键都是带引号的字符串,比如: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)'] - 严格匹配键的字符:
注意指标名称里的@、括号、小数点、大小写(Matchzoo的指标名通常是小写)都要完全一致,哪怕多一个空格或者少一个符号都会导致KeyError。 - 检查回调函数的指标配置:
如果你自定义了评估回调,确认回调里指定的指标名称和训练输出的名称一致,避免因配置错误导致键名不匹配。
内容的提问来源于stack exchange,提问作者June Yoon
相关产品推荐
相关产品推荐

