超参数调优:让模型训练更“聪明”
超参数是我们在开始训练前手动设置的参数(如学习率、网络层数等)。找到一组好的超参数对模型性能至关重要。学习率调度和早停是两种能让训练过程更智能、更高效的关键技术。
学习率调度 (Learning Rate Scheduling)
核心思想:在训练过程中动态地调整学习率。比喻:就像赛车手,在直道上(训练初期)用高速度(大学习率)快速前进,在进入弯道时(训练后期接近最优解)则会减速(小学习率)进行精细微调,以求获得最佳圈速。
动手试试:
点击“开始训练”,观察学习率是如何随着训练轮次 (Epoch) 的增加而自动下降的。
from tensorflow import keras
# 定义一个学习率调度函数
def scheduler(epoch, lr):
if epoch < 10:
return lr
else:
return lr * tf.math.exp(-0.1)
# 创建回调函数
lr_scheduler = keras.callbacks.LearningRateScheduler(scheduler)
# 在训练时使用
model.fit(X, y, epochs=50, callbacks=[lr_scheduler])
早停 (Early Stopping)
核心思想:在训练过程中监控一个关键指标(通常是验证集损失),当这个指标在一定轮次内不再提升时,就自动停止训练。比喻:就像烤面包,你会盯着面包的颜色,当它变得金黄酥脆时就立刻拿出来,而不是等到烤焦了才后悔。这能有效防止过拟合,并节省大量的训练时间。
动手试试:
点击“开始训练”,观察训练损失(蓝线)和验证损失(红线)的变化。当验证损失达到最低点后开始回升时,就是“早停”的最佳时机。
from tensorflow import keras
# 创建早停回调函数
# monitor: 监控的指标
# patience: 容忍多少个epoch没有提升
early_stopping = keras.callbacks.EarlyStopping(
monitor='val_loss',
patience=5
)
# 在训练时使用
model.fit(
X, y,
epochs=100,
validation_data=(X_val, y_val),
callbacks=[early_stopping]
)