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))
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM