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

Keras新优化器中decay参数已弃用,如何替换实现相同效果?

解决Adam优化器decay参数弃用问题

新版Keras/TensorFlow已经移除了Adam优化器的decay参数,要实现和原代码decay=INIT_LR / EPOCHS完全一致的学习率衰减效果,需要用学习率调度器替代,以下是具体实现方式:

核心逻辑说明

原decay参数的学习率更新公式为:

lr = INIT_LR / (1 + decay * 累计训练步数)

其中“累计训练步数”指的是训练过程中完成的batch数量(每跑一个batch算一步)。我们需要用自定义调度器复现这个计算逻辑。

代码修改方案

方案一:自定义学习率调度器(完美匹配原效果)

INIT_LR = 1e-3
EPOCHS = 10
BS = 8

# 定义匹配原decay逻辑的学习率调度器
def lr_schedule(step):
    decay = INIT_LR / EPOCHS  # 和原代码的decay值完全一致
    return INIT_LR / (1 + decay * step)

# 初始化Adam优化器,传入调度器
opt = tf.keras.optimizers.Adam(learning_rate=lr_schedule)

# 编译模型
model.compile(loss="binary_crossentropy", optimizer=opt, metrics=["accuracy"])

# 注意:新版Keras已弃用fit_generator,改用fit即可
R = model.fit(
    trainAug.flow(X_train, Y_train, batch_size=BS),
    steps_per_epoch=len(X_train) // BS,
    validation_data=(X_test, Y_test),
    validation_steps=len(X_test) // BS,
    epochs=EPOCHS
)

方案二:用内置调度器实现近似线性衰减

如果不想自定义函数,也可以用PolynomialDecay实现线性衰减效果(和原decay逻辑略有差异,但趋势一致):

from tensorflow.keras.optimizers.schedules import PolynomialDecay

INIT_LR = 1e-3
EPOCHS = 10
BS = 8
total_train_steps = EPOCHS * (len(X_train) // BS)

# 初始化线性衰减调度器,训练结束时学习率降到0
lr_schedule = PolynomialDecay(
    initial_learning_rate=INIT_LR,
    decay_steps=total_train_steps,
    end_learning_rate=0.0,
    power=1.0
)

opt = tf.keras.optimizers.Adam(learning_rate=lr_schedule)
# 后续编译、训练代码同上

额外提示

  • 所有新版Keras优化器的学习率调整都需要通过learning_rate参数传入调度器,不再支持单独的decay参数。
  • fit_generator已被官方标记为弃用,直接使用model.fit()即可,参数用法和之前完全一致。

内容的提问来源于stack exchange,提问作者9Tharaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:00:27