keras 如何获得AdamW优化器的学习率(使用多优化器)

eqoofvh9  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(463)

我正在使用AdamW优化器,有两种不同的学习率:一个用于预训练图层,另一个用于自定义图层

import tensorflow_addons as tfa
lr = 1e-3
wd = 1e-4 * lr
optimizers = [
tfa.optimizers.AdamW(learning_rate=pre_trained_layer_lr , weight_decay=wd),
tfa.optimizers.AdamW(learning_rate=lr, weight_decay=wd)
    ]
optimizers_and_layers = [(optimizers[0], base_model.layers[0]), (optimizers[1], 
                        base_model.layers[1:])]

optimizer = tfa.optimizers.MultiOptimizer(optimizers_and_layers)

现在,我想在模型训练过程中可视化这个学习率。

from keras import backend as K
from keras.callbacks import TensorBoard

class LRTensorBoard(TensorBoard):
    # add other arguments to __init__ if you need
    def __init__(self, log_dir, **kwargs):
        super().__init__(log_dir=log_dir, **kwargs)

    def on_epoch_end(self, epoch, logs=None):
        logs = logs or {}
        logs.update({'lr': K.eval(self.model.optimizer.lr)})
        super().on_epoch_end(epoch, logs)

#Using the code class in model.fit
model.fit(...., callbacks = [LRTensorBoard(path)])

但是我没有找到model.optimizer.lr,因为这个变量在上面提到的优化器中不存在。

model.optimizer.optimizer_specs[0]

但我无法找到与此优化器相关的不同学习率。
如何使用AdamW优化器获得预训练层和自定义层的学习率?

xcitsw88

xcitsw881#

model.optimizer.optimizer_specs是一个字典列表,其中包含每个优化器的信息。您可以通过model.optimizer.optimizer_specs[0]['optimizer']访问第一个优化器对象。这样,您也可以通过model.optimizer.optimizer_specs[0]['optimizer'].lr访问学习率。

相关问题