我添加了一个回调函数来降低学习率:
keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=100,
verbose=0, mode='auto',epsilon=0.00002, cooldown=20, min_lr=0)
下面是我的tensorboard回调:
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)
我想确保学习率调度器在训练过程中已经启动,所以我想将学习率输出到tensorboard上。但我找不到可以设置它的地方。
我还检查了优化器API,但没有运气。
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
如何将学习率输出到tensorboad?
6条答案
按热度按时间sr4lhrrt1#
根据Keras的作者,正确的方法是将
TensorBoard
回调子类化:然后将其作为
callbacks
参数的一部分传递给model.fit
(来自Finncent Price):fsi0uk1n2#
注意,tf的当前夜间版本(2.5 -可能更早)使用LearningRateSchedule的学习率会自动添加到tensorboard的日志中。以下解决方案仅在您以其他方式调整学习率时才是必要的-例如。通过ReduceLROnPlateau或LearningRateScheduler(与LearningRateSchedule不同)回调。
虽然扩展
tf.keras.callbacks.TensorBoard
是一个可行的选择,但我更喜欢组合而不是子类化。这允许我们组合多个类似的回调,并在多个其他回调中使用记录的学习率(例如,如果你添加一个CSVLogger,它也应该把学习率值写入文件)。
然后在
model.fit
中2q5ifsrm3#
你给了优化器两次代码,而不是TensorBoard回调。无论如何,我没有找到在TensorBoard上显示学习率的方法。我在训练结束后绘制它,从History对象中获取数据:
图表如下所示:LR plot
对不起,这不是你想问的问题,但可能会有帮助。
izkcnapc4#
lr curve in tensorboard
hrirmatl5#
对于tensorflor 2.5,如果你有一些自定义的学习率函数:
然后在您的model.fit中调用回调:
umuewwlo6#
只要确保
ReduceLROnPlateau
回调在回调列表中位于TensorBoard
回调之前。然后,您将看到每个epoch都有一个lr
度量记录到TensorBoard。