如何在Keras中绘制Epoch与训练准确率关系图及迭代对应疑问
Hey there! Let's tackle your two questions step by step.
关于“10次迭代对应1个epoch”的推测验证
你的推测完全站得住脚!先明确几个核心概念帮你确认:
- Epoch:指模型完整遍历一遍整个训练数据集的过程。
- 迭代(Step/Iteration):指模型处理一个批量(batch)的训练数据并完成一次参数更新的过程。
假设训练数据集总共有 N 个样本,训练时设置的批量大小(batch size)为 B,那么一个epoch包含的迭代次数就是 ceil(N / B)(向上取整,确保所有样本都被遍历)。如果论文里标注10次迭代对应1个epoch,那说明训练集总样本数刚好是批量大小的10倍(比如batch size=128,训练集就有1280个样本,1280/128=10)。
要验证这个推测的话,你可以:
- 查找论文的实验设置部分,看是否明确标注了训练集规模和batch size的数值,直接计算两者的商是否等于10;
- 如果论文没直接写训练集大小,也可以结合实验用到的数据集名称(公开数据集的规模通常是已知的)反推batch size是否符合这个比例。
在Keras中绘制epoch与训练准确率的关系图
Keras的训练过程会自动记录每个epoch的指标数据,你可以借助matplotlib轻松画出这个关系图,具体步骤如下:
训练模型并保存历史记录
调用model.fit()时,将返回的History对象保存下来,它包含了训练过程中所有指标的变化数据:# 假设你已经定义好模型model和训练数据train_x、train_y history = model.fit( train_x, train_y, epochs=50, # 你设置的训练轮数 batch_size=32, # 如果有验证集可以加上validation_data=(val_x, val_y) )提取训练准确率数据
History对象的history属性是一个字典,键为指标名称,值为对应每个epoch的指标数值。注意Keras版本的差异:- 较新的TensorFlow Keras版本中,训练准确率的键是
'accuracy'; - 旧版本Keras可能使用
'acc'作为键。
提取代码如下:
train_acc = history.history['accuracy'] # 或 history.history['acc']- 较新的TensorFlow Keras版本中,训练准确率的键是
绘制准确率曲线
导入matplotlib并画图:import matplotlib.pyplot as plt # 生成epoch的序号(从1开始) epochs = range(1, len(train_acc) + 1) # 绘制训练准确率曲线 plt.plot(epochs, train_acc, 'bo-', label='Training Accuracy') plt.title('Training Accuracy vs. Epochs') plt.xlabel('Epochs') plt.ylabel('Accuracy') plt.legend() # 显示图形 plt.show()
如果需要同时对比验证准确率,只需要额外提取history.history['val_accuracy'](或'val_acc'),再添加一条曲线即可。
内容的提问来源于stack exchange,提问作者user121
相关产品推荐
相关产品推荐

