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

如何在TensorFlow中使用AdamOptimizer且禁用内置学习率衰减?

解决TensorFlow Adam优化器固定学习率的问题

没问题,你完全不需要重新编写一个全新的Optimizer就能实现需求!下面给你两种实用的方案,根据你的场景选择就行:

方案一:自定义学习率抵消Adam的内置修正

TensorFlow的Adam确实会自动用 lr = lr_t * sqrt(1 - beta2_power) / (1 - beta1_power) 这个公式调整学习率,如果你想手动控制最终使用的学习率,可以反过来计算传入优化器的初始学习率,抵消掉这个内置修正。

举个例子,假设你想要手动设置的目标学习率是 my_target_lr,那么你可以把传入Adam的学习率设为:

adjusted_lr = my_target_lr * (1 - optimizer.beta1_power) / tf.math.sqrt(1 - optimizer.beta2_power)

然后在每次迭代前更新优化器的学习率:

optimizer.learning_rate.assign(adjusted_lr)

这样优化器内部计算后,最终使用的学习率就会刚好是你手动设置的my_target_lr,不会被内置的修正项改变。

方案二:继承Adam重写学习率计算逻辑

如果觉得上面的抵消方法有点绕,你可以直接继承TensorFlow的Adam优化器,重写计算学习率的部分,去掉那个自动修正的逻辑。

代码示例大概是这样:

import tensorflow as tf
from tensorflow.keras.optimizers import Adam

class FixedLRAdam(Adam):
    def _get_lr(self, var_device, var_dtype, apply_state):
        # 直接返回当前设置的学习率,去掉内置的修正项
        lr_t = tf.identity(self.lr, name="lr_t")
        return lr_t

这样你使用FixedLRAdam的时候,优化器就只会用你传入的学习率,不会自动乘以那个beta相关的修正因子,完全由你手动控制学习率的调整。

额外说明

如果你只是想自己手动做学习率衰减(比如阶梯衰减、余弦衰减),同时不想让Adam的内置修正干扰,更推荐用方案二,逻辑更清晰,不容易出错。方案一适合临时快速调整,不需要修改优化器类的场景。

内容的提问来源于stack exchange,提问作者Khoi Tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:23:30