模型训练中一种确定大概最优学习率范围的方法

  注:我目前只在时间序列预测的问题中见过这种操作。别的场景不确定是否可用。欢迎大家补充啊。
  在我训练模型的过程中,我经常不知该如何确定学习率,因为学习率的大小直接会影响到模型训练的精度的结果,因此我们可以用tf.keras.callbacks中的一个叫lr_schedule的学习率控制器,他可以帮助我们确定最优学习率的大概的范围。
例如,在一个有序序列的预测范例中,使用这种方法来确定大致最优的学习率所在的范围:
下面展示一些 内联代码片

model = tf.keras.models.Sequential([
  tf.keras.layers.Lambda(lambda x: tf.expand_dims(x, axis=-1),
                      input_shape=[None])
  # 若return_sequences设为true,那么每一个神经元的运算结果都将输出到下一层
  # 若为false,则只输出最后一个神经元的结果
  tf.keras.layers.SimpleRNN(40, return_sequences=True),
  tf.keras.layers.SimpleRNN(40),
  tf.keras.layers.Dense(1),
  tf.keras.layers.Lambda(lambda x: x * 100.0)
])
# callbacks的一个参数,学习率的控制,为了寻找当损失函数最低时对应的学习率
lr_schedule = tf.keras.callbacks.LearningRateScheduler(
    lambda epoch: 1e-8 * 10**(epoch / 20))
optimizer = tf.keras.optimizers.SGD(lr=1e-8, momentum=0.9)
# 这里有了一个新的损失函数出现
model.compile(loss=tf.keras.losses.Huber(),
              optimizer=optimizer,
              metrics=["mae"])
# 训练大概100个epochs,可以得到一个学习率与损失的曲线图
history = model.fit(train_set, epochs=100, callbacks=[lr_schedule])

之后打印出图像

plt.semilogx(history.history["lr"], history.history["loss"])
plt.axis([1e-8, 1e-4, 0, 30])

由图可知,最佳的范围大概在红圈之内,因此我们可以折中取一个5*10^(-5),之后以这个学习率为准训练即可。
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值