【tensorflow-keras-BatchNormalization】BatchNormalization批量标准化层
標(biāo)準(zhǔn)化層 Normalization - Keras 中文文檔 https://keras.io/zh/layers/normalization/#batchnormalization
什么是批標(biāo)準(zhǔn)化 (Batch Normalization) - zh https://zhuanlan.zhihu.com/p/24810318
BN 效果
Batch normalization 也可以被看做一個(gè)層面. 在一層層的添加神經(jīng)網(wǎng)絡(luò)的時(shí)候, 我們先有數(shù)據(jù) X, 再添加全連接層, 全連接層的計(jì)算結(jié)果會(huì)經(jīng)過 激勵(lì)函數(shù) 成為下一層的輸入, 接著重復(fù)之前的操作. Batch Normalization (BN) 就被添加在每一個(gè)全連接和激勵(lì)函數(shù)之間.
之前說過, 計(jì)算結(jié)果在進(jìn)入激勵(lì)函數(shù)前的值很重要, 如果我們不單單看一個(gè)值, 我們可以說, 計(jì)算結(jié)果值的分布對(duì)于激勵(lì)函數(shù)很重要. 對(duì)于數(shù)據(jù)值大多分布在這個(gè)區(qū)間的數(shù)據(jù), 才能進(jìn)行更有效的傳遞. 對(duì)比這兩個(gè)在激活之前的值的分布. 上者沒有進(jìn)行 normalization, 下者進(jìn)行了 normalization, 這樣當(dāng)然是下者能夠更有效地利用 tanh 進(jìn)行非線性化的過程.
沒有 normalize 的數(shù)據(jù) 使用 tanh 激活以后, 激活值大部分都分布到了飽和階段, 也就是大部分的激活值不是-1, 就是1, 而 normalize 以后, 大部分的激活值在每個(gè)分布區(qū)間都還有存在. 再將這個(gè)激活后的分布傳遞到下一層神經(jīng)網(wǎng)絡(luò)進(jìn)行后續(xù)計(jì)算, 每個(gè)區(qū)間都有分布的這一種對(duì)于神經(jīng)網(wǎng)絡(luò)就會(huì)更加有價(jià)值.
Batch normalization 函數(shù)
keras.layers.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True,scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None)批量標(biāo)準(zhǔn)化層 (Ioffe and Szegedy, 2014)。
在每一個(gè)批次的數(shù)據(jù)中標(biāo)準(zhǔn)化前一層的激活項(xiàng), 即,應(yīng)用一個(gè)維持激活項(xiàng)平均值接近 0,標(biāo)準(zhǔn)差接近 1 的轉(zhuǎn)換。
參數(shù)
- axis: 整數(shù),需要標(biāo)準(zhǔn)化的軸 (通常是特征軸)。 例如,在 data_format=“channels_first” 的 Conv2D 層之后, 在 BatchNormalization 中設(shè)置 axis=1。
- momentum: 移動(dòng)均值和移動(dòng)方差的動(dòng)量。
- epsilon: 增加到方差的小的浮點(diǎn)數(shù),以避免除以零。
- center: 如果為 True,把 beta 的偏移量加到標(biāo)準(zhǔn)化的張量上。 如果為 False, beta 被忽略。
- scale: 如果為 True,乘以 gamma。 如果為 False,gamma 不使用。 當(dāng)下一層為線性層(或者例如 nn.relu), 這可以被禁用,因?yàn)榭s放將由下一層完成。
- beta_initializer: beta 權(quán)重的初始化方法。
- gamma_initializer: gamma 權(quán)重的初始化方法。
- moving_mean_initializer: 移動(dòng)均值的初始化方法。
- moving_variance_initializer: 移動(dòng)方差的初始化方法。
- beta_regularizer: 可選的 beta 權(quán)重的正則化方法。
- gamma_regularizer: 可選的 gamma 權(quán)重的正則化方法。
- beta_constraint: 可選的 beta 權(quán)重的約束方法。
- gamma_constraint: 可選的 gamma 權(quán)重的約束方法。
輸入尺寸
可以是任意的。如果將這一層作為模型的第一層, 則需要指定 input_shape 參數(shù) (整數(shù)元組,不包含樣本數(shù)量的維度)。
輸出尺寸
與輸入相同。
總結(jié)
以上是生活随笔為你收集整理的【tensorflow-keras-BatchNormalization】BatchNormalization批量标准化层的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【tensorflow-keras-GR
- 下一篇: Keras.layers各种层介绍,网络