gpt4 book ai didi

python - tensorflow 2.0 自定义训练循环的学习率

转载 作者:行者123 更新时间:2023-12-03 18:20:55 26 4
gpt4 key购买 nike

当我使用 tensorflow 2.0 自定义训练循环时,是否有任何函数或方法可以显示学习率?

这是 tensorflow 指南的示例:

def train_step(images, labels):
with tf.GradientTape() as tape:
predictions = model(images)
loss = loss_object(labels, predictions)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))

train_loss(loss)
train_accuracy(labels, predictions)

模型训练时如何从优化器中检索当前学习率?

如果您能提供任何帮助,我将不胜感激。 :)

最佳答案

在自定义训练循环设置中,您可以 print(optimizer.lr.numpy())得到学习率。

如果您使用的是 keras api,您可以定义自己的回调来记录当前的学习率。

from tensorflow.keras.callbacks import Callback

class LRRecorder(Callback):
"""Record current learning rate. """
def on_epoch_begin(self, epoch, logs=None):
lr = self.model.optimizer.lr
print("The current learning rate is {}".format(lr.numpy()))

# your other callbacks
callbacks.append(LRRecorder())

更新
w := w - (base_lr*m/sqrt(v))*grad = w - act_lr*grad我们上面得到的学习率是 base_lr .然而, act_lr在训练过程中是适应性改变的。以Adam优化器为例, act_lrbase_lr 决定, mv . mv是参数的第一和第二动量。不同的参数有不同的 mv值。所以如果你想知道 act_lr ,您需要知道变量的名称。例如,您想知道 act_lr变量 Adam/dense/kernel ,您可以访问 mv像这样,

for var in optimizer.variables():
if 'Adam/dense/kernel/m' in var.name:
print(var.name, var.numpy())

if 'Adam/dense/kernel/v' in var.name:
print(var.name, var.numpy())

然后你可以很容易地计算出 act_lr使用上述公式。

关于python - tensorflow 2.0 自定义训练循环的学习率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58149839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com