gpt4 book ai didi

python - Keras:最佳纪元选择

转载 作者:行者123 更新时间:2023-12-04 03:03:01 25 4
gpt4 key购买 nike

我正在尝试编写一些逻辑来选择在 Keras 中运行神经网络的最佳时期。我的代码保存了一定数量的 epoch 的训练损失和测试损失,然后根据某种逻辑选择最合适的 epoch。代码如下所示:

ini_epochs = 100

df_train_loss = DataFrame(data=history.history['loss'], columns=['Train_loss']);
df_test_loss = DataFrame(data=history.history['val_loss'], columns=['Test_loss']);
df_loss = concat([df_train_loss,df_test_loss], axis=1)

Min_loss = max(df_loss['Test_loss'])
for i in range(ini_epochs):
Test_loss = df_loss['Test_loss'][i];
Train_loss = df_loss['Train_loss'][i];
if Test_loss > Train_loss and Test_loss < Min_loss:
Min_loss = Test_loss;

逻辑背后的想法是这样的;为了得到最好的模型,选择的epoch应该选择损失值最低的模型,但必须在训练损失值之上以避免过拟合。

一般来说,这种时代选择方法工作正常。但是,如果测试损失值从一开始就低于训练损失,则此方法选择零纪元(见下文)。
enter image description here

现在我可以添加另一个 if评估测试和训练损失之间的差异是正还是负的语句,然后为每种情况编写逻辑,但是如果差异开始为正然后为负会发生什么。我感到困惑,无法编写有效的代码。

所以,我的问题是:

1)你能告诉我你将如何编写代码来解释图中显示的情况(以及测试和训练损失曲线交叉的情况)。我会说策略是采用差异最小的值。

2)我很有可能以错误的方式解决这个问题。我知道 Keras 有回调功能,但我不喜欢使用 save_best_only 的想法。功能,因为它可以保存过拟合的模型。关于更有效的时代选择方法的任何建议都会很棒。

最佳答案

使用 Keras 中提供的 EarlyStopping。提前停止基本上是在您的损失开始增加时停止训练(或者换句话说,验证准确性开始下降)。使用 ModelCheckpoint 将模型保存在您想要的任何位置。

from keras.callbacks import EarlyStopping, ModelCheckpoint

STAMP = 'simple_lstm_glove_vectors_%.2f_%.2f'%(rate_drop_lstm,rate_drop_dense)
early_stopping =EarlyStopping(monitor='val_loss', patience=5)
bst_model_path = STAMP + '.h5'
model_checkpoint = ModelCheckpoint(bst_model_path, save_best_only=True, save_weights_only=True)

hist = model.fit(data_train, labels_train, \
validation_data=(data_val, labels_val), \
epochs=50, batch_size=256, shuffle=True, \
callbacks=[early_stopping, model_checkpoint])

model.load_weights(bst_model_path)

引用这个 link欲了解更多信息

关于python - Keras:最佳纪元选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47421951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com