当前位置: 首页 > 知识库问答 >
问题:

通过权重和偏差在keras中记录学习速率计划

秦信瑞
2023-03-14

我正在训练keras模型,并为优化器使用自定义学习速率调度程序(类型为tf.keras.optimizers.schedules.LearningRateSchedule),我希望通过权重记录学习速率的变化

共有3个答案

林修真
2023-03-14

进一步简化答案

class LRLogger(tf.keras.callbacks.Callback):

    def on_epoch_end(self, epoch, logs=None):
        lr = float(tf.keras.backend.get_value(self.model.optimizer.lr))
        wandb.log({'lr': lr}, commit=False)
魏翰
2023-03-14

我想完成ayush-thakur的答案。由于调度程序更新了每个批次/步骤的学习速率,而不是每个 epoch 的学习速率,因此记录器应检索 epoch * steps_per_epoch 的学习速率,其中 steps_per_epoch 是每个 epoch 的批处理数。此值存储在优化器迭代中

拾取@ayush-thakur代码示例并更改on_epoch_end函数:

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(self.optimizer.iterations)
        wandb.log({"lr": lr}, commit=False)

然后,您可以在model.fit训练过程中使用此回调。

注意上面的代码会返回每个纪元最后一批的学习率,要获取每个纪元第一批的学习率,请将on_epoch_end替换为on_epoch_begin

相化
2023-03-14

根据Martjin的评论进行了更新!

您可以使用自定义Keras回调将自定义学习速率记录到权重和偏差上。

W

例如:

这是我的 tf.keras.optimizers.schedules.LearningRateSchedule 基于 scheduler。

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(self.optimizer.iterations)
      wandb.log({"lr": lr}, commit=False)

请注意,在 wandb.log 调用中,我使用了 commit=False 参数。这将确保在同一时间步长记录每个指标。更多关于它在这里。

调用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

 类似资料:
  • 问题内容: 我正在使用 Keras 运行一个简单的前馈网络。仅具有一个隐藏层,我想对每个输入与每个输出的相关性做出一些推断,并且我想提取权重。 这是模型: 为了提取重量,我写道: 不幸的是,我没有矩阵中的biass列,我知道Keras会自动将其放入。 您知道如何获取偏倚权重吗? 预先感谢您的帮助 ! 问题答案: 对于图层,返回两个元素的列表,第一个元素包含权重,第二个元素包含偏差。因此,您可以简单

  • 我似乎无法理解学习率的价值。我得到的是下面。 我已经尝试了200个epoch的模型,并希望查看/更改学习速率。这不是正确的方法吗?

  • 我已经用Java编程了一个神经网络,现在正在研究反向传播算法。 我已经了解到权重的批量更新将导致更稳定的梯度搜索,而不是在线权重更新。 作为一个测试,我创建了一个100点的时间序列函数,这样x=[0..99]和y=f(x)。我创建了一个神经网络,有一个输入和一个输出,还有两个隐藏层,有10个神经元用于测试。在解决这个问题时,我所面临的是反向传播算法的学习速度。 我有100个输入点,所以当我计算每个

  • 我试图用python做一些密集的神经网络机器学习。我在完成代码以计算权重和偏差的输出时遇到问题。当我在某个索引的权重和矩阵元素之间应用操作数时,我得到的错误是一起广播。我是否对循环应用了错误的索引,或者我做错了什么请帮助。 我如何在上面的循环中正确引用我的训练变量来消除广播错误,谢谢。

  • 我需要帮助来了解时钟偏差的工作原理。我们定义时钟偏差来处理双方之间的时间变化。但是,我的困惑是: 我们在令牌本身中有所有信息,如令牌创建时间和过期时间 可以验证令牌 令牌在服务器上创建 那么,为什么我们需要时钟偏差呢?谁能给我一个例子,说明它是如何工作的,以及在哪些情况下它会导致问题或好处?

  • 本文向大家介绍tensorflow输出权重值和偏差的方法,包括了tensorflow输出权重值和偏差的方法的使用技巧和注意事项,需要的朋友参考一下 使用tensorflow 训练模型时,我们可以使用 tensorflow自带的 Save模块 tf.train.Saver()来保存模型,使用方式很简单 就是在训练完模型后,调用saver.save()即可 重新载入模型 但是这种方式保存的模型中包含特