如何获取并修改Keras模型学习率?打印optimizer.lr仅返回变量对象
如何正确查看和修改Keras模型的学习率
嘿,你直接打印ig_cnn_model.optimizer.lr的方法确实不对——你看到的<tf.Variable 'lr_6:0' shape=() dtype=float32_ref>只是TensorFlow变量的引用信息,不是实际的学习率数值。下面给你讲讲正确的操作方式:
一、查看当前学习率
根据你的使用场景,分两种情况处理:
- 静态学习率(未使用学习率调度器):直接调用
numpy()方法获取实际数值:print(ig_cnn_model.optimizer.lr.numpy()) - 动态学习率(使用了ReduceLROnPlateau、StepLR等调度器):此时
optimizer.lr存储的可能是初始学习率,当前生效的是经过调度器衰减后的结果,需要用这个方法获取:import tensorflow as tf print(ig_cnn_model.optimizer._decayed_lr(tf.float32).numpy())
二、修改学习率
同样分场景操作:
- 直接修改静态学习率:用
assign()方法给lr变量赋值即可:# 示例:将学习率设置为0.0001 ig_cnn_model.optimizer.lr.assign(0.0001) - 修改动态学习率(临时覆盖调度器):如果想强制设置一个新的学习率,同样可以用
assign()方法,之后调度器会基于这个新值继续按规则调整。如果需要调整调度器的参数,建议重新定义调度器并关联模型,但训练中途调整参数比较繁琐,优先推荐assign方式。 - 避坑提醒:训练中途不要轻易重新编译模型(比如
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=new_lr))),这会重置模型的训练状态,之前200个epoch的训练成果会白费。
内容的提问来源于stack exchange,提问作者user14492
相关产品推荐
相关产品推荐

