• TensorFlow学习(4) 学习率调度 & 正则化


    1. 学习率调度

    恒定高学习率训练可能会发散,低学习率会收敛到最优解但是会花费大量时间

    1.1 常用的学习率调度及其概念

    幂调度
    指数调度
    分段调度
    性能调度

    1.2 实现幂调度

    在创建优化器时,设置超参数decay
    使用示例:

    optimizer=keras.optimizers.SGD(lr=0.001,momentum=0.9,nesterov=True,decay=1e-4)
    
    • 1

    1.3 实现指数调度

    创建一个返回配置函数的函数

    def exponential_decay(lr0,s):
        def exponential_decay_fn(epoch):
            return lr0 * 0.1 **(epoch/s)
        return exponential_decay_fn
    
    exponential_decay_fn=exponential_decay(lr0=0.01,s=20)
    lr_scheduler= keras.callbacks.LearningRateScheduler(exponential_decay_fn)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用示例:

    history=model.fit(X_train,y_train,epochs=3,validation_split=0.1,callbacks=[lr_scheduler])
    
    • 1

    fit函数中使用callbacks参数传入回调函数

    1.4 分段调度

    回调函数是一个根据epoch的分段函数

    1.5 性能调度

    连续一定轮次最好验证损失都没有改善的话它将使学习率乘以某个数

    使用示例

    lr_scheduler= keras.callbacks.ReduceLROnPlateau(factor=0.5,patience=5)
    model.fit(.....,callbacks=[lr_scheduler])
    
    • 1
    • 2

    1.5.1 ReduceLROnPlateau

    tf.keras.callbacks.ReduceLROnPlateau(
        monitor='val_loss',
        factor=0.1,
        patience=10,
        verbose=0,
        mode='auto',
        min_delta=0.0001,
        cooldown=0,
        min_lr=0,
        **kwargs
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    1.6 在每个步骤更新优化器

    定义学习率,然后将学习率传递给任意优化器

    使用之前的指数调度,示例如下

    s=20 * len(X_train)
    learning_rate= tf.optimizers.schedules.ExponentialDecay(0.01,s,0.1)
    optimizer=keras.optimizers.SGD(learning_rate)
    
    • 1
    • 2
    • 3

    1.6.1报错 :AttributeError: module ‘keras.api._v2.keras’ has no attribute ‘optimizer’

    出错的代码:
    learning_rate= tf.keras.optimizer.schedules.ExponentialDecay(0.01,s,0.1)
    
    修改:
    learning_rate= tf.optimizers.schedules.ExponentialDecay(0.01,s,0.1)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.6.2 ExponentialDecay

    在这里插入图片描述
    直接线上翻译(蟒蛇—>python)

    2. 正则化

    2.1 l1和l2正则化

    keras.layers.Dense(300,activation='PReLU',
                            kernel_initializer='lecun_normal',
                            kernel_regularizer=keras.regularizers.l2(0.01))
    
    
    • 1
    • 2
    • 3
    • 4
    • keras.regularizers.l2 :使用l2正则化
    • keras.regularizers.l1:使用l1正则化
    • keras.regularizers.l1_l2:使用l1和l2正则化
      在训练步骤中的每个步骤都会调用该正则化函数来计算正则化损失

    使用重复的代码(往往会有相同的激活函数,初始化策略和正则化函数)可以使用functools.partial()函数创建一个带有一些默认参数值的任何可调用对象创建一个小的包装函数

    from functools import partial
    
    RegularizedDense=partial(keras.layers.Dense,
                             activation = 'elu',
                             kernel_initializer="he_normal",
                             kernel_regularizer=keras.regularizers.l2(0.01))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    模型建立示例

    from functools import partial
    
    RegularizedDense=partial(keras.layers.Dense,
                             activation = 'elu',
                             kernel_initializer="he_normal",
                             kernel_regularizer=keras.regularizers.l2(0.01))
    model=keras.models.Sequential([
        keras.layers.Flatten(input_shape=[28,28]),
        RegularizedDense(300),
        RegularizedDense(200),
        RegularizedDense(10,activation='softmax',kernel_initializer="glorot_uniform")
    ])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.2 dropout

    keras.layers.Dropout(rate=0.2),
    
    • 1
    • 通常只可以对第一到第三层(不包括输出层)中的神经元应用dropout
    • 训练后的我们需要将每个输入连接权重乘以保留概率(1-p)。或者是在训练过程中将每个神经元的输出初一保留概率
  • 相关阅读:
    服务器的操作系统,你选择哪些?
    【State模式】C++设计模式——状态模式
    Mathorcup数学建模竞赛第四届-【妈妈杯】C题:面向多层次需求的西安旅游线路优化设计(lingo代码实现)
    【大数据】-- dataworks 创建odps 的 hudi 外表
    DIV简单个人静态HTML网页设计作品 WEB静态个人介绍网页模板代码 DW个人网站制作成品 期末网页制作与实现...
    关于python多线程的一些理解
    2023年【天津市安全员C证】模拟考试及天津市安全员C证实操考试视频
    [iOS]使用MonkeyDev完成Hook
    MySql模糊查询大全
    Python基础学习__测试报告
  • 原文地址:https://blog.csdn.net/weixin_50862344/article/details/126890197