为何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")

问题
为何在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
相关产品推荐
相关产品推荐

