我已经使用“ModelCheckpoint”实现了提前停止。目标是选择训练最好的模型版本并返回所属的纪元号。
early_stopping = EarlyStopping(monitor='val_loss', patience=earlyStoppingEpochs, restore_best_weights=False)
checkpoint_filepath = '/tmp/checkpoint.weights.h5'
checkpoint = ModelCheckpoint(filepath=checkpoint_filepath, save_weights_only=True, monitor="val_loss", mode="min", save_best_only=True, verbose=verbose)
history = model.fit(Train_Data, Train_Label, epochs=epochs, batch_size=batch_size, validation_data=(Val_Data, Val_Label), verbose=verbose, callbacks=[early_stopping, checkpoint])
hist = model.history.history['val_loss']
finalEpochs = np.argmin(hist) + 1
model.load_weights(checkpoint_filepath)
一切正常。唯一仍然困扰我的一点是没有考虑未经训练的模型的验证损失。相反,初始损失设置为 Inf。 “Epoch 1:val_loss 从 **inf ** 改进到 2.35898,将模型保存到 /tmp/checkpoint.weights.h5”
然而,在我的应用程序中,即使是第一个训练周期也可能会导致验证损失恶化。然后它应该返回未经训练的模型作为最佳模型和理想的纪元数 0。
你知道是否可以调整行为,使其在 EarlyStopping 开始时不使用 inf,而是使用未经训练的模型的验证损失?
在 Keras 中,根据该文档,她:
https://keras.io/api/callbacks/early_stopping/
您实际上可以指定参数
start_from_epoch=0
(默认为0)。为了避免 -inf,也许您可以在几个时期(例如 2 个时期)后开始。