【问题标题】: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)