sco*_*ang 13 keras tensorboard
我添加了一个回调来降低学习率:
keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=100,
verbose=0, mode='auto',epsilon=0.00002, cooldown=20, min_lr=0)
Run Code Online (Sandbox Code Playgroud)
这是我的张量回调:
keras.callbacks.TensorBoard(log_dir='./graph/rank{}'.format(hvd.rank()), histogram_freq=10, batch_size=FLAGS.batch_size,
write_graph=True, write_grads=True, write_images=False)
Run Code Online (Sandbox Code Playgroud)
我想确保它在我的训练期间被踢了,所以我想把学习率输出到tensorbaord.But我找不到我可以设置的地方.
我还检查了优化器api,但没有运气.
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
Run Code Online (Sandbox Code Playgroud)
那么如何将学习率输出到tensorboad?
alk*_*mid 20
根据Keras的作者,正确的方法是对TensorBoard回调进行子类化:
from keras import backend as K
from keras.callbacks import TensorBoard
class LRTensorBoard(TensorBoard):
def __init__(self, log_dir, **kwargs): # add other arguments to __init__ if you need
super().__init__(log_dir=log_dir, **kwargs)
def on_epoch_end(self, epoch, logs=None):
logs.update({'lr': K.eval(self.model.optimizer.lr)})
super().on_epoch_end(epoch, logs)
Run Code Online (Sandbox Code Playgroud)
Dom*_*ack 10
请注意,使用LearningRateSchedule的当前夜间版本的 tf(2.5 - 可能更早)学习率会自动添加到张量板的日志中。仅当您以其他方式调整学习率时,才需要以下解决方案 - 例如,通过ReduceLROnPlateau或LearningRateScheduler(与LearningRateSchedule不同)回调。
虽然扩展tf.keras.callbacks.TensorBoard是一个可行的选择,但我更喜欢组合而不是子类化。
class LearningRateLogger(tf.keras.callbacks.Callback):
def __init__(self):
super().__init__()
self._supports_tf_logs = True
def on_epoch_end(self, epoch, logs=None):
if logs is None or "learning_rate" in logs:
return
logs["learning_rate"] = self.model.optimizer.lr
Run Code Online (Sandbox Code Playgroud)
这允许我们组合多个类似的回调,并在多个其他回调中使用记录的学习率(例如,如果您添加一个CSVLogger,它也应该将学习率值写入文件)。
然后在 model.fit
model.fit(
callbacks=[
LearningRateLogger(),
# other callbacks that update `logs`
tf.keras.callbacks.TensorBoard(path),
# other callbacks that use updated logs, e.g. CSVLogger
],
**kwargs
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3866 次 |
| 最近记录: |