自定义学习率(tensorflow2+)

1、前言

学习率的设置对神经网络的训练很重要,一般都会在训练的前期用大的学习率,随着网络的迭代,逐渐减小学习率。
此处介绍了3中自定义学习率的方法。

2、代码

import tensorflow as tf


def lrfn(epoch, init_lr=0.05, attenuation_rate=0.5, attenuation_step=5):

    lr = init_lr
    lr = lr * attenuation_rate**(epoch//attenuation_step)
    return lr


class Mylearning_rate():
    def __init__(self):
        pass
	# 等同于上面的 lrfn
    def fixed_step_attenuation(self,
                               epoch,
                               init_lr=0.05,
                               attenuation_rate=0.5,
                               attenuation_step=5):
        ''' Fixed step size decay
            :param epoch: 当前epoch
            :param init_lr: 初始学习率
            :param attenuation_rate: 衰减率
            :param attenuation_step: 衰减步长
            :return: init_lr * attenuation_rate**(epoch//attenuation_step)
            '''
        lr = init_lr
        lr = lr * attenuation_rate ** (epoch // attenuation_step)
        return lr

    def exponential_attenuation(self, epoch):
        # 指数衰减
        if epoch < 10:
            return 0.001
        else:
            return 0.001 * tf.math.exp(0.1 * (10 - epoch))

    def cos_attenuation(self, epoch, init_lr=0.05, period = 10):
        '''
        :param epoch: 当前epoch
        :param init_lr: 初始学习率
        :param period: 几步长衰减到0
        :return:
        '''
        num = 2 / init_lr
        lr = (tf.math.cos(epoch*3/period) + 1) / num
        if lr <0:
            raise ValueError('The learning rate is less than 0')
        return lr

3、使用

在使用时。首先调用tf.keras.callbacks.LearningRateScheduler

learning_rate = Mylearning_rate()
lr_callback = tf.keras.callbacks.LearningRateScheduler(
        learning_rate.fixed_step_attenuation, verbose=True)

然后在fit函数中使用callbacks参数

model.fit( callbacks=[lr_callback]  )

这样就可以在训练过程中自动改变学习率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值