【问题标题】:How to employ learning rate schedule while training a tensorflow model from scratch如何在从头开始训练张量流模型时使用学习率计划
【发布时间】:2020-11-16 19:12:22
【问题描述】:

此问题可能与another question on stack overflow 重复。

但是,答案并未说明如何使用调度程序(可以在简单的 python 中实现)修改优化器学习率。

按照here 的说明,我正在从头开始训练 tensorflow 模型。因此,优化器被定义为:optimizer = keras.optimizers.SGD(learning_rate=1e-3),因此,学习率在一开始就被定义。但是,我想要一个学习率调度程序,例如tf.keras.optimizers.schedules.ExponentialDecay。那么如何在训练循环中更改优化器学习率呢?

请注意,在这种情况下我没有使用model.fit

非常感谢任何帮助。

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    试试这个代码:

    import tensorflow as tf
    
    class CustomSchedule(tf.keras.optimizers.schedules.LearningRateSchedule):
      def __init__(self, drop=0.5):
        super(CustomSchedule, self).__init__()
        self.drop = drop
        
      def __call__(self, step):
        return tf.math.pow(self.drop, step)
    
    def train_step(images, labels):
      with tf.GradientTape() as tape:
        predictions = model(images)
        loss = tf.losses.mse(labels, predictions)
      gradients = tape.gradient(loss, model.trainable_variables)
      optimizer.apply_gradients(zip(gradients, model.trainable_variables))
    
    learning_rate = CustomSchedule(0.5)
    optimizer = tf.keras.optimizers.SGD(learning_rate=learning_rate)
    model = tf.keras.Sequential([
      tf.keras.layers.Dense(10)
    ])
    input = tf.random.uniform([10, 10])
    labels = tf.random.uniform([10, 10], 0, 10, dtype=tf.int32)
    train_step(input, labels)
    

    【讨论】:

      猜你喜欢
      • 2019-05-22
      • 2022-01-14
      • 2021-05-05
      • 2020-11-30
      • 2023-03-12
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2017-08-11
      相关资源
      最近更新 更多