You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ReduceLROnPlateau在多模型训练时初始学习率一致?

问题原因与解决方法

问题根源

ReduceLROnPlateau回调会直接修改模型优化器的学习率变量(TensorFlow中为Variable类型),如果多个模型共享同一个优化器实例,或者循环中复用了上一次训练后已修改学习率的优化器,就会导致下一个模型的初始学习率继承上一次训练后的结果。

解决办法

1. 每个模型使用独立的优化器实例

在循环内为每个模型单独创建并编译优化器,确保每个模型的初始学习率都是全新的:

from tensorflow.keras.callbacks import ReduceLROnPlateau
from tensorflow.keras.optimizers import Adam

initial_lr = 0.01

for model in models:
    # 每次循环新建优化器实例
    optimizer = Adam(learning_rate=initial_lr)
    model.compile(optimizer=optimizer, loss='你的损失函数', metrics=['你的指标'])
    
    reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=10)
    model.fit(dataset, epochs=10, validation_data=val_dataset, callbacks=[reduce_lr])

2. 复用模型/优化器时手动重置学习率

如果需要复用模型或优化器,在每次训练前手动将优化器的学习率重置为初始值:

from tensorflow.keras.callbacks import ReduceLROnPlateau

initial_lr = 0.01

for model in models:
    # 重置优化器的学习率到初始值
    model.optimizer.learning_rate.assign(initial_lr)
    
    reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=10)
    model.fit(dataset, epochs=10, validation_data=val_dataset, callbacks=[reduce_lr])

验证方法

训练时查看日志,确认每个模型的Epoch 1学习率都是你设置的初始值(比如示例中的0.01),即说明问题已解决。

内容的提问来源于stack exchange,提问作者Mateusz Dorobek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:00:50