Keras代码中出现KeyError: 'val_acc'的原因排查请求
分析你的KeyError问题
这种情况确实有点费解——明明打印出来的history键里明确包含val_acc,但取值时却触发了KeyError,我之前在调试Keras代码时也遇到过类似的场景,大概率是这几个原因导致的:
变量名被意外覆盖:你得检查下代码里
history = model.fit(...)之后,有没有其他地方重新给history赋值了?比如后面写了history = some_other_variable(比如把它改成了DataFrame或者其他对象),这时候原来的训练返回的History对象就被替换了,再去取history.history['val_acc']自然会找不到对应键。交互式环境的状态混乱:如果是在Jupyter Notebook或者IPython这类交互式环境里,很容易出现变量状态不一致的情况。比如你之前运行过一次训练但中途手动停止了,得到的history不完整;后来又重新运行了fit得到完整的history,但报错的是之前那次不完整history的取值操作。这种情况下,建议你重启内核,从头运行所有代码试试。
训练过程中意外中断:如果训练的时候因为内存不足、程序崩溃等原因没跑完所有epochs,history对象可能没收集全验证集的指标数据。但你说打印的时候能看到
val_acc,说明后来的history是完整的,那可能报错那次的训练并没有正常完成。
给你几个具体的解决步骤:
- 调整代码顺序:先运行
history = model.fit(...),紧接着就打印history.history.keys(),然后再执行val_acc = history.history['val_acc'],确保中间没有任何修改history变量的操作。 - 全局搜索代码:确认没有其他地方给
history变量赋值,避免覆盖掉训练返回的History对象。 - 尝试安全取值:用
val_acc = history.history.get('val_acc')代替直接取值,如果返回None,说明当前history里确实没有这个键,这时候再排查训练是否正常完成;如果能拿到值,那可能是之前的操作有状态残留。
内容的提问来源于stack exchange,提问作者Simplicity
相关产品推荐
相关产品推荐

