• 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)。或者是在训练过程中将每个神经元的输出初一保留概率
  • 相关阅读:
    我的Qt作品(19)使用Qt写一个轻量级的视觉框架---第2章,仿海康VM实现思维导图拖拽方式的算法流程图
    [附源码]java毕业设计同城搬家平台
    Oh my zsh
    java-net-php-python-ssm儿童演出礼服租赁网站计算机毕业设计程序
    点击化学修饰糖TCO-PEG-alginate 反式环辛烯-聚乙二醇-海藻酸钠 (TCO-PEG-半乳糖,乳糖基,纤维二糖,葡萄糖)
    网络流问题详解
    Go/Golang语言学习实践[回顾]教程09--学习成绩统计的示例【上】
    Python实现websocket接口自动化测试
    建立一种特殊的字典访问不存在的键k时可以自动创建键k同时给k赋初值defaultdict()
    C++——内联函数|auto关键字
  • 原文地址:https://blog.csdn.net/weixin_50862344/article/details/126890197