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

为何validation_split=0.05时history中训练与验证R2元素数相同?

问题背景

我参考了回归分析代码,设置validation_split=0.05训练模型,训练代码如下:

# fit the network
history = model.fit(seq_array, label_array, epochs=100, batch_size=200, validation_split=0.05, verbose=2,
          callbacks = [keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=0, mode='min'),
                       keras.callbacks.ModelCheckpoint(model_path,monitor='val_loss', save_best_only=True, mode='min', verbose=0)]
          )

# list all data in history
print(history.history.keys())

随后绘制R²值曲线,代码如下:

# summarize history for R^2
fig_acc = plt.figure(figsize=(10, 10))
plt.plot(history.history['r2_keras'])
plt.plot(history.history['val_r2_keras'])
plt.title('model r^2')
plt.ylabel('R^2')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
fig_acc.savefig("model_r2.png")

R²曲线

问题

为何在validation_split设为0.05时,history.history['r2_keras']和history.history['val_r2_keras']的元素数量相同?


解答

这是因为Keras的model.fit()在每一轮(epoch)结束后,都会同时记录训练集的指标(r2_keras)和验证集的指标(val_r2_keras),和validation_split的比例无关。

哪怕只留5%的数据做验证,每完成一轮训练,模型都会在训练集上计算一次R²,同时在验证集上也计算一次R²,两个列表的元素数量都等于实际训练的轮数——也就是早停触发前运行的epoch数(如果没触发早停就是你设置的epochs=100)。

比如模型跑了30轮就触发早停停止训练,那两个列表都会有30个元素,每一轮对应一组训练/验证的R²值,所以数量必然相同。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:25:38