在 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')
您可以做两件有用的事情:
- 使用带有
save_best_only=True
参数的 ModelCheckpoint 回调。仅当模型被认为是“最佳”时才保存,并且不会覆盖根据监控数量的最新最佳模型。
- 使用 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])
我正在训练一个具有恒定学习率和 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')
您可以做两件有用的事情:
- 使用带有
save_best_only=True
参数的 ModelCheckpoint 回调。仅当模型被认为是“最佳”时才保存,并且不会覆盖根据监控数量的最新最佳模型。 - 使用 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])