基于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
相关产品推荐
相关产品推荐

