监控 InverseTimeDecay() 的学习率 - float() 参数必须是字符串或数字,而不是 'InverseTimeDecay'
Monitor the Learning Rate of the InverseTimeDecay() - float() argument must be a string or a number, not 'InverseTimeDecay'
我的目标是查看 Adam 优化器的学习率进展,我在其上应用了 InverseTimeDecay 计划。所以我想检查一下学习率是否真的下降了。
在检查了这个 堆栈溢出后,我在我的代码中做了类似的更改:
- 在我的回调函数中添加了这个,
tf.keras.callbacks.LearningRateScheduler(hparams[HP_LEARNING_RATE])
- 根据发布的类似问题添加了此函数调用:
def get_lr_metric(optimizer):
def lr(y_true, y_pred):
return optimizer.lr
return lr
- 还在 model.compile 方法中添加了以下调用,
lr_metric = [get_lr_metric(optimizer)]
model.compile(optimizer=optimizer,
loss=neural_network_parameters['model_loss'],
metrics=neural_network_parameters['model_metric'] + lr_metric, ) #+ lr_metric
但是,当我开始训练模型时出现以下错误:
TypeError: float() argument must be a string or a number, not 'InverseTimeDecay'
TypeError: 'float' object is not callable
请检查我的 colab notebook 并请评论我应该做的任何更改。另外,在评论中写下我可能忘记提及的任何其他信息。
[UDPATE] - 我想我的问题是 optimizer.lr 值的类型。在我的例子中是一个 InverseTimeDecay 对象。如何将该对象的类型更改为浮点数? InverseTimeDecay 浮动。
InverseTimeDecay
并且每个 LearningRateSchedule
实例都是接受一个步骤和 return 学习率的函数。
所以学习率是完全可以从 iterration/steps 预测的,并且没有真正需要使用像 tensorboard 这样的东西来监控它,但是 如果你真的想要你可以使用如下内容:
def get_lr_metric(optimizer):
lr = optimizer.learning_rate
if isinstance(lr, tf.keras.optimizers.schedules.LearningRateSchedule):
return lr(optimizer.iterations)
else:
return lr
我的目标是查看 Adam 优化器的学习率进展,我在其上应用了 InverseTimeDecay 计划。所以我想检查一下学习率是否真的下降了。
在检查了这个
- 在我的回调函数中添加了这个,
tf.keras.callbacks.LearningRateScheduler(hparams[HP_LEARNING_RATE])
- 根据发布的类似问题添加了此函数调用:
def get_lr_metric(optimizer):
def lr(y_true, y_pred):
return optimizer.lr
return lr
- 还在 model.compile 方法中添加了以下调用,
lr_metric = [get_lr_metric(optimizer)]
model.compile(optimizer=optimizer,
loss=neural_network_parameters['model_loss'],
metrics=neural_network_parameters['model_metric'] + lr_metric, ) #+ lr_metric
但是,当我开始训练模型时出现以下错误:
TypeError: float() argument must be a string or a number, not 'InverseTimeDecay'
TypeError: 'float' object is not callable
请检查我的 colab notebook 并请评论我应该做的任何更改。另外,在评论中写下我可能忘记提及的任何其他信息。
[UDPATE] - 我想我的问题是 optimizer.lr 值的类型。在我的例子中是一个 InverseTimeDecay 对象。如何将该对象的类型更改为浮点数? InverseTimeDecay 浮动。
InverseTimeDecay
并且每个 LearningRateSchedule
实例都是接受一个步骤和 return 学习率的函数。
所以学习率是完全可以从 iterration/steps 预测的,并且没有真正需要使用像 tensorboard 这样的东西来监控它,但是 如果你真的想要你可以使用如下内容:
def get_lr_metric(optimizer):
lr = optimizer.learning_rate
if isinstance(lr, tf.keras.optimizers.schedules.LearningRateSchedule):
return lr(optimizer.iterations)
else:
return lr