Tensorflow學習筆記No 6

2022-02-07 23:23:05 字數 1799 閱讀 3663

本篇主要講述什麼是標準化,為什麼要標準化,以及如何進行標準化(新增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,...