您可以使用自定义 Keras 回调将自定义学习率记录到权重和偏差上。
W&B 的 WandbCallback 无法自动记录您的自定义学习率。通常,对于此类自定义日志记录,如果您使用自定义训练循环,您可以使用wandb.log()。如果你使用model.fit()自定义Keras回调方法。
例如:
这是我基于tf.keras.optimizers.schedules.LearningRateSchedule 的调度程序。
class MyLRSchedule(tf.keras.optimizers.schedules.LearningRateSchedule):
def __init__(self, initial_learning_rate):
self.initial_learning_rate = initial_learning_rate
def __call__(self, step):
return self.initial_learning_rate / (step + 1)
optimizer = tf.keras.optimizers.SGD(learning_rate=MyLRSchedule(0.001))
您可以使用optimizer.learning_rate(step) 获取优化器的当前学习率。这可以包装为自定义 Keras 回调并使用 wandb.log()。
class LRLogger(tf.keras.callbacks.Callback):
def __init__(self, optimizer):
super(LRLogger, self).__init__()
self.optimizer = optimizer
def on_epoch_end(self, epoch, logs):
lr = self.optimizer.learning_rate(epoch)
wandb.log({"lr": lr}, commit=False)
请注意,在wandb.log 调用中,我使用了commit=False 参数。这将确保在同一时间步记录每个指标。更多信息here.
致电model.fit()。
tf.keras.backend.clear_session()
model = some_model()
model.compile(optimizer, 'categorical_crossentropy', metrics=['acc'])
wandb.init(entity='wandb-user-id', project='my-project', job_type='train')
_ = model.fit(trainloader,
epochs=EPOCHS,
validation_data=testloader,
callbacks=[WandbCallback(), # using WandbCallback to log default metrics.
LRLogger(optimizer)]) # using callback to log learning rate.
wandb.finish()
这是 W&B 媒体面板: