Keras/TensorFlow中Adam优化器CNN学习率衰减回调报错如何解决?
解决Adam优化器获取衰减学习率的AttributeError问题
问题原因
_decayed_lr是TensorFlow优化器的私有内部方法,不属于公开API范畴,不同版本的TensorFlow或优化器实现可能不会暴露该属性,直接调用会触发AttributeError。
解决方案
改用优化器的**公开属性learning_rate**获取当前衰减后的学习率,该方式兼容固定学习率和学习率调度器(如指数衰减、步长衰减等)场景,同时避免版本兼容问题。
修改后的自定义回调代码:
class CustomCallback(tf.keras.callbacks.Callback): def on_epoch_begin(self, epoch, logs=None): lr = self.model.optimizer.learning_rate # 若学习率是可调用的调度器,传入当前迭代步数计算衰减后的值 if callable(lr): current_decayed_lr = lr(self.model.optimizer.iterations).numpy() else: current_decayed_lr = lr.numpy() print("current decayed lr: {:0.7f}".format(current_decayed_lr))
补充说明
- 若使用TensorFlow 2.x早期版本,也可通过
tf.keras.backend.get_value()获取学习率:current_decayed_lr = tf.keras.backend.get_value(self.model.optimizer.learning_rate) - 永远避免直接访问以下划线开头的私有属性(如
_decayed_lr),这类属性属于内部实现细节,无版本兼容性保障,随时可能被调整。
内容的提问来源于stack exchange,提问作者akann
相关产品推荐
相关产品推荐

