我正在使用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优化器获得预训练层和自定义层的学习率?
1条答案
按热度按时间xcitsw881#
model.optimizer.optimizer_specs
是一个字典列表,其中包含每个优化器的信息。您可以通过model.optimizer.optimizer_specs[0]['optimizer']
访问第一个优化器对象。这样,您也可以通过model.optimizer.optimizer_specs[0]['optimizer'].lr
访问学习率。