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

基于IMDB数据集训练模型绘制损失曲线遇‘acc未定义’错误求助

问题分析与修复

错误原因

你遇到的name 'acc' is not defined错误,是因为代码中epochs = range(1, len(acc) + 1)这一行里的acc是未定义变量——你没有从模型训练返回的history对象中提取训练精度数据,就直接使用了这个变量名。

另外你连续两次调用model.compile(),第二次的配置(metrics=['acc'])覆盖了第一次的metrics=['accuracy'],所以当前history.history字典里的训练精度对应的键是'acc',而非'accuracy'。

修复方案

只需修改绘图部分的代码,要么从history_dict中提取训练精度数据,要么直接用已有的loss_values的长度生成epochs序列(训练轮次和损失值的数量是一致的)。

修改后的绘图代码片段

import matplotlib.pyplot as plt

history_dict = history.history
loss_values = history_dict['loss']
val_loss_values = history_dict['val_loss']
# 提取训练精度数据(若后续需要绘制精度曲线可保留)
acc_values = history_dict['acc']

# 用loss_values的长度生成epochs序列,避免依赖未定义的acc变量
epochs = range(1, len(loss_values) + 1)

plt.plot(epochs, loss_values, 'bo', label='Training loss')
plt.plot(epochs, val_loss_values, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

plt.show()

额外优化建议

你两次调用model.compile()是多余的,保留其中一次即可。如果想和教材内容保持一致,建议删除第二次model.compile()调用,只保留第一次使用optimizers.RMSprop的配置,此时history.history里的训练精度键会是'accuracy',提取时对应改成acc_values = history_dict['accuracy']。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:07:53