本篇主要講述什麼是標準化,為什麼要標準化,以及如何進行標準化(新增bn層)。
傳統機器學習中標準化也叫做歸一化。
一般是將資料對映到指定的範圍,用於去除不同維度資料的量綱以及量綱單位(說白了就是讓資料盡可能處於某個範圍內)。
資料標準化讓機器學習模型看到的不同樣本彼此之間更加相似,這有助於模型的學習與對新資料的泛化。
標準化:
將資料減去其平均值使其中心值為0,然後將資料除以其標準差使其標準差為1。
歸一化:
將資料減去最小值除以最大時,使取值範圍壓縮到0~1之間。
batch normalization(bn),批標準化
和普通的資料標準化類似,是將分散的資料統一的一種做法,也是優化神經網路的一種方法。
不僅在資料輸入之前對資料做標準化,在網路模型的每一次變換之後都應該考慮資料的標準化。
即使在訓練過程中,均值和方差隨著時間發生變化,它也可以適應性的將資料標準化。
批標準化解決的問題是梯度消失與梯度**。
批標準化是一種訓練優化方法。
對於啟用函式,之前一直使用sigmoid函式,其函式影象成乙個s型,如下所示,它會使得輸出在[0, 1]之間:
如果我們輸入的資料在0附近左右均勻分布,x的變化就會引起y的正常變化,就是乙個正常的梯度變化。
但是,當資料全部非常大,或者非常小的時候,x上的變化幾乎不會引起y的變化,訓練的速度就會非常緩慢,且效果差,這種情況就稱為梯度消失。同理,在其他的啟用函式中,也會出現資料範圍導致的梯度異常激增,x上的微小變化就會導致y的劇烈變化,從而影響訓練效果,這種情況稱之為梯度**。
資料預處理可以加速收斂,同理,在神經網路中使用批標準化也可以加速收斂,而且還有更多的優點。
1.具有正則化的效果(抑制過擬合)。
2.提高模型泛化能力。
3.允許更高的學習率從而加速收斂。
4.批標準化有助於梯度的傳播,因此能夠使用更深的網路進行訓練。對於特別深的神經網路,只有包含多個batch normalization(bn)層才能進行訓練。
batch normalization通常在卷積層或者全連線層之後使用(原始**中一般是應用於卷積層或全連線層之後,在啟用函式之前。但是,實際上放在啟用函式之後效果可能更好)。
使用tf.keras.layers.batchnormalization()來實現。
tf.keras.layers.batchnormalization()不僅可以處理訓練資料的均值和方差,也可以在**時,根據訓練資料均值和方差的期望值對測試資料進行處理。
**:
1 model.add(tf.keras.layers.conv2d(64, (3, 3)))2model.add(tf.keras.layers.batchnormalization())
3 model.add(tf.keras.layers.activation('
relu'))
4 #兩種bn層插入方式
5 model.add(tf.keras.layers.conv2d(64, (3, 3), activation = '
relu'))
6 model.add(tf.keras.layers.batchnormalization())
tensorflow學習筆記
tensorflow安裝可以直接通過命令列或者原始碼安裝,在此介紹tensorflow8命令列安裝如下 安裝tensorflow sudo pip install upgrade 另外,解除安裝tensorflow命令為 sudo pip uninstall tensorflow tensorflo...
Tensorflow學習筆記
1.如何在虛擬機器中安裝tensor flow 1 首先安裝pip pip install 2 pip install 2.學習tensorflow需要學習 python and linux 3.使用 tensorflow,你必須明白 tensorflow 1 使用圖 graph 來表示計算任務.2...
TensorFlow學習筆記
1 擬合直線 import the library import tensorflow as tf import numpy as np prepare train data train x np.linspace 1,1,100 temp1 train x,temp2 train x.shape,...