keras_14_初始化Initializers

1. 模型初始化

  • 初始化定义了设置 Keras 各层权重随机初始值的方法。用来将初始化器传入 Keras 层的参数名取决于具体的层。通常关键字为 kernel_initializerbias_initializer:

    model.add(Dense(64,
                    kernel_initializer='random_uniform',
                    bias_initializer='zeros'))
    
  • 内置的初始化工具 (是 keras.initializers 模块的一部分)

    • Initializer

      • 初始化器基类:所有初始化器继承这个类。
    • Zeros

      • 将张量初始值设为 0 的初始化器。
    • Ones

      • 将张量初始值设为 1 的初始化器。
    • Constant

      • 将张量初始值设为 constant的初始化器。
    • RandomNormal

      • 按照正态分布生成随机张量
    • RandomUniform

      • 按照均匀分布生成随机张量
    • TruncatedNormal

      • 截尾正态分布。生成的随机值与 RandomNormal 生成的类似,但是在距离平均值两个标准差之外的随机值将被丢弃并重新生成。这是用来生成神经网络权重和滤波器的推荐初始化器。
    • VarianceScaling

      • 初始化器能够根据权值的尺寸调整其规模。

        使用 distribution="normal" 时,样本是从一个以 0 为中心的截断正态分布中抽取的,stddev = sqrt(scale / n),其中 n 是:

        • 权值张量中输入单元的数量,如果 mode = "fan_in"。
        • 输出单元的数量,如果 mode = "fan_out"。
        • 输入和输出单位数量的平均数,如果 mode = "fan_avg"。

        使用 distribution="uniform" 时,样本是从 [-limit,limit] 内的均匀分布中抽取的,其中 limit = sqrt(3 * scale / n)

    • Orthogonal

      • 生成一个随机正交矩阵
    • Identity

      • 生成单位矩阵
    • lecun_uniform

      • LeCun 均匀初始化器。它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limitsqrt(3 / fan_in)fan_in 是权值张量中的输入单位的数量。
    • glorot_normal (cs231n推荐):也称为 Xavier 正态分布初始化器。

      • 它从以 0 为中心,标准差为 stddev = sqrt(2 / (fan_in + fan_out)) 的截断正态分布中抽取样本, 其中 fan_in 是权值张量中的输入单位的数量, fan_out 是权值张量中的输出单位的数量。
    • glorot_uniform:Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器。

      • 它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limitsqrt(6 / (fan_in + fan_out))fan_in 是权值张量中的输入单位的数量, fan_out 是权值张量中的输出单位的数量。
    • he_normal

      • He 正态分布初始化器。它从以 0 为中心,标准差为 stddev = sqrt(2 / fan_in) 的截断正态分布中抽取样本, 其中 fan_in是权值张量中的输入单位的数量,
    • lecun_normal

      • LeCun 正态分布初始化器。它从以 0 为中心,标准差为 stddev = sqrt(1 / fan_in) 的截断正态分布中抽取样本, 其中 fan_in是权值张量中的输入单位的数量。
    • he_uniform

      • He 均匀方差缩放初始化器。它从 [-limit,limit] 中的均匀分布中抽取样本, 其中 limitsqrt(6 / fan_in), 其中 fan_in 是权值张量中的输入单位的数量。

2. 自定义初始化器

  • 如果传递一个自定义的可调用函数,那么它必须使用参数 shape(需要初始化的变量的尺寸)和 dtype(数据类型):

    from keras import backend as K
    
    def my_init(shape, dtype=None):
        return K.random_normal(shape, dtype=dtype)
    
    model.add(Dense(64, kernel_initializer=my_init))
    
原文地址:https://www.cnblogs.com/LS1314/p/10380676.html