如何在Keras中计算200轮训练的训练准确率平均值?
修正Keras训练准确率平均值计算的问题
你的代码目前存在几个关键问题,导致无法正确计算200个epoch的训练准确率平均值:
- 循环内每次调用
model.fit(epochs=200),会让模型在每轮循环里都训练200个epoch,最终总共训练了40000个epoch,完全偏离了你的需求; model.fit()返回的是History对象,不是直接的准确率数值,你需要从这个对象的history属性里提取对应的数据。
下面是两种可行的修正方案,帮你准确计算目标平均值:
方案一:逐epoch循环训练(适合需要逐轮监控的场景)
num_epochs = 200 total_sum = 0.0 for n in range(num_epochs): # 每次只训练1个epoch,减少冗余输出 history = model.fit(x_train, y_train, epochs=1, batch_size=64, verbose=2) # 提取当前epoch的训练准确率(旧版Keras可能用'acc'替代'accuracy') current_acc = history.history['accuracy'][0] total_sum += current_acc # 计算并打印平均值 avg_train_acc = total_sum / num_epochs print(f"200个epoch的训练准确率平均值: {avg_train_acc:.4f}") # 测试集评估 score = model.evaluate(x_test, y_test, verbose=2) print(f"测试集损失: {score[0]:.4f}, 测试集准确率: {score[1]:.4f}")
方案二:一次性训练后计算(更高效简洁)
如果你不需要逐epoch的中间操作,直接一次性训练200个epoch,再从历史记录里提取所有准确率数据计算平均值,效率会更高:
# 一次性完成200个epoch的训练 history = model.fit(x_train, y_train, epochs=200, batch_size=64, verbose=2) # 提取所有epoch的训练准确率列表 all_train_acc = history.history['accuracy'] # 计算平均值 avg_train_acc = sum(all_train_acc) / len(all_train_acc) print(f"200个epoch的训练准确率平均值: {avg_train_acc:.4f}") # 测试集评估 score = model.evaluate(x_test, y_test, verbose=2) print(f"测试集损失: {score[0]:.4f}, 测试集准确率: {score[1]:.4f}")
小提示:
如果运行时出现键错误,检查你的Keras版本——旧版本中准确率的键是'acc',新版本是'accuracy',替换对应字符串即可。
内容的提问来源于stack exchange,提问作者Hadeer El-Zayat
相关产品推荐
相关产品推荐

