回调函数
回调函数是传递给模型以自定义和扩展其在训练期间的行为的对象。我们可以编写自己的自定义回调,或使用tf.keras.callbacks中的内置函数,常用内置回调函数如下:
tf.keras.callbacks.ModelCheckpoint:定期保存模型。
tf.keras.callbacks.LearningRateScheduler:动态更改学习率。
tf.keras.callbacks.EarlyStopping:提前终止。
tf.keras.callbacks.TensorBoard:使用TensorBoard。
代码:
超参数设置
Epochs = 10
定义一个学习率动态设置函数
def lr_Scheduler(epoch):
if epoch > 0.9 Epochs:
lr = 0.0001
elif epoch > 0.5 Epochs:
lr = 0.001
elif epoch > 0.25 * Epochs:
lr = 0.01
else:
lr = 0.1
print(lr)
return lr
callbacks = [
#早停:
tf.keras.callbacks.EarlyStopping(
#不再提升的关注指标
monitor='val_loss',
#不再提升的阈值
min_delta=1e-2,
#不再提升的轮次
patience=2),
#定期保存模型:
tf.keras.callbacks.ModelCheckpoint(
#模型路径
filepath='testmodel_{epoch}.h5',
#是否保存最佳模型
save_best_only=True,
#监控指标
monitor='val_loss'),
#动态更改学习率
tf.keras.callbacks.LearningRateScheduler(lr_Scheduler),
#使用TensorBoard
tf.keras.callbacks.TensorBoard(log_dir='./logs')
]
model.fit(train_x, train_y, batch_size=16, epochs=Epochs,
callbacks=callbacks, validation_data=(val_x, val_y))
输出:
Train on 1000 samples, validate on 200 samples
0
0.1
Epoch 1/10
1000/1000 [==============================] - 0s 155us/sample - loss: 12.7907 - categorical_accuracy: 0.0920 - val_loss: 12.7285 - val_categorical_accuracy: 0.0750
1
0.1
Epoch 2/10
1000/1000 [==============================] - 0s 145us/sample - loss: 12.6756 - categorical_accuracy: 0.0940 - val_loss: 12.8673 - val_categorical_accuracy: 0.0950
…
0.001
Epoch 10/10
1000/1000 [==============================] - 0s 134us/sample - loss: 12.3627 - categorical_accuracy: 0.1020 - val_loss: 12.3451 - val_categorical_accuracy: 0.0900