在 Keras 中的某个时期后恢复神经网络训练

Resuming neural network training after a certain epoch in Keras

我正在训练一个具有恒定学习率和 epoch = 45 的神经网络。我观察到准确度在第 35 个 epoch 时最高,然后摆动并下降。我想我需要降低第 35 个时期的学习率。在所有时期完成后,我是否有机会从第 35 个时期再次训练模型?我的代码如下所示-

model_nn = keras.Sequential()
model_nn.add(Dense(352, input_dim=28, activation='relu', kernel_regularizer=l2(0.001)))
model_nn.add(Dense(384, activation='relu', kernel_regularizer=l2(0.001)))
model_nn.add(Dense(288, activation='relu', kernel_regularizer=l2(0.001)))
model_nn.add(Dense(448, activation='relu', kernel_regularizer=l2(0.001)))
model_nn.add(Dense(320, activation='relu', kernel_regularizer=l2(0.001)))
model_nn.add(Dense(1, activation='sigmoid'))


auc_score = tf.keras.metrics.AUC()

model_nn.compile(loss='binary_crossentropy', 
                 optimizer=keras.optimizers.Adam(learning_rate=0.0001), 
                                                 metrics=['accuracy',auc_score])

history = model_nn.fit(X_train1, y_train1,
                       validation_data=(X_test, y_test),
                       epochs=45, 
                       batch_size=250, 
                       verbose=1)

_, accuracy = model_nn.evaluate(X_test, y_test)
# Saving model weights
model_nn.save('mymodel.h5')

您可以做两件有用的事情:

  1. 使用带有 save_best_only=True 参数的 ModelCheckpoint 回调。仅当模型被认为是“最佳”时才保存,并且不会覆盖根据监控数量的最新最佳模型。
  2. 使用 ReduceLROnPlateau and EarlyStopping 回调。 ReduceLROnPlateau 将在验证子集的指标停止改进时降低学习率。 EarlyStopping 将在监控指标完全停止改进时停止训练。

简单来说,ReduceLROnPlateau帮我们找到全局最小值,EarlyStopping负责epoch的数量,ModelCheckpoint会保存最好的模型。

代码可能如下所示:

early_stoping = EarlyStopping(patience=5, min_delta=0.0001)
reduce_lr_loss = ReduceLROnPlateau(patience=2, verbose=1, min_delta=0.0001, factor=0.65)
model_checkpoint = ModelCheckpoint(save_best_only=True)

history = model_nn.fit(X_train1, y_train1,
                       validation_data=(X_test,y_test),
                       epochs=100, 
                       batch_size=250, 
                       verbose=1,
                       callbacks=[early_stoping, reduce_lr_loss, model_checkpoint])