【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization
<<小白學PyTorch>>
擴展之Tensorflow2.0 | 21 Keras的API詳解(上)卷積、激活、初始化、正則
擴展之Tensorflow2.0 | 20 TF2的eager模式與求導
擴展之Tensorflow2.0 | 19 TF2模型的存儲與載入
擴展之Tensorflow2.0?| 18 TF2構建自定義模型
擴展之Tensorflow2.0?| 17 TFrec文件的創建與讀取
擴展之Tensorflow2.0?| 16 TF2讀取圖片的方法
擴展之Tensorflow2.0?| 15 TF2實現一個簡單的服裝分類任務
小白學PyTorch | 14 tensorboardX可視化教程
小白學PyTorch | 13 EfficientNet詳解及PyTorch實現
小白學PyTorch | 12 SENet詳解及PyTorch實現
小白學PyTorch | 11 MobileNet詳解及PyTorch實現
小白學PyTorch | 10 pytorch常見運算詳解
小白學PyTorch | 9 tensor數據結構與存儲結構
小白學PyTorch | 8 實戰之MNIST小試牛刀
小白學PyTorch | 7 最新版本torchvision.transforms常用API翻譯與講解
小白學PyTorch | 6 模型的構建訪問遍歷存儲(附代碼)
小白學PyTorch | 5 torchvision預訓練模型與數據集全覽
小白學PyTorch | 4 構建模型三要素與權重初始化
小白學PyTorch | 3 淺談Dataset和Dataloader
小白學PyTorch | 2 淺談訓練集驗證集和測試集
小白學PyTorch | 1 搭建一個超簡單的網絡
小白學PyTorch | 動態圖與靜態圖的淺顯理解
參考目錄:
- 1 池化層 
- 1.1 最大池化層 
- 1.2 平均池化層 
- 1.3 全局最大池化層 
- 1.4 全局平均池化層 
 
- 2 Normalization 
- 2.1 BN 
- 2.2 LN 
 
1 池化層
和卷積層相對應,每一種池化層都有1D,2D,3D三種類型,這里主要介紹2D處理圖像的一個操作。1D和3D可以合理的類推。
1.1 最大池化層
tf.keras.layers.MaxPooling2D(pool_size=(2,?2),?strides=None,?padding="valid",?data_format=None,?**kwargs )這個strides在默認的情況下就是步長為2 下面看個例子:
import?tensorflow?as?tf x?=?tf.random.normal((4,28,28,3)) y?=?tf.keras.layers.MaxPooling2D(pool_size=(2,2)) print(y(x).shape) >>>?(4,?14,?14,?3)如果你把strides改成1:
import?tensorflow?as?tf x?=?tf.random.normal((4,28,28,3)) y?=?tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides?=?1) print(y(x).shape) >>>?(4,?27,?27,?3)如果再把padding改成‘same’:
import?tensorflow?as?tf x?=?tf.random.normal((4,28,28,3)) y?=?tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides?=?1,padding='same') print(y(x).shape) >>>?(4,?28,?28,?3)這個padding默認是'valid',一般strides為2,padding是valid就行了。
1.2 平均池化層
和上面的最大池化層同理,這里就展示一個API就不再多說了。
tf.keras.layers.AveragePooling2D(pool_size=(2,?2),?strides=None,?padding="valid",?data_format=None,?**kwargs )1.3 全局最大池化層
tf.keras.layers.GlobalMaxPooling2D(data_format=None,?**kwargs)這個其實相當于pool_size等于特征圖尺寸的一個最大池化層??匆粋€例子:
import?tensorflow?as?tf x?=?tf.random.normal((4,28,28,3)) y?=?tf.keras.layers.GlobalMaxPooling2D() print(y(x).shape) >>>?(4,?3)可以看到,一個通道只會輸出一個值,因為我們的輸入特征圖的尺寸是,所以這里的全局最大池化層等價于pool_size=28的最大池化層。
1.4 全局平均池化層
與上面的全局最大池化層等價。
tf.keras.layers.GlobalAveragePooling2D(data_format=None,?**kwargs)2 Normalization
Keras官方只提供了兩種Normalization的方法,一個是BatchNormalization,一個是LayerNormalization。雖然沒有提供InstanceNormalization和GroupNormalization的方法,我們可以通過修改BN層的參數來構建。
2.1 BN
tf.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,renorm=False,renorm_clipping=None,renorm_momentum=0.99,fused=None,trainable=True,virtual_batch_size=None,adjustment=None,name=None,**kwargs )我們來詳細講解一下參數:
- axis:整數。表示哪一個維度是通道數維度,默認是-1,表示是最后一個維度。如果之前設置了channels_first,那么需要設置axis=1. 
- momentum:當training過程中,Batch的均值方差會根據batch計算出來,在預測或者驗證的時候,這個均值方差是采用training過程中計算出來的滑動均值和滑動方差的。具體的計算過程是: 
- epsilon:一個防止運算除法除以0的一個極小數,一般不做修改; 
- center:True的話,則會有一個可訓練參數beta,也就是beta均值的這個offset;如果是False的話,這個BN層則退化成以0為均值,gamma為標準差的Normalization。默認是True,一般不做修改。 
- scale:與center類似,默認是True。如果是False的話,則不使用gamma參數,BN層退化成以beta為均值,1為標準差的Normalization層。 
- 其他都是初始化的方法和正則化的方法,一般不加以限制,使用的方法在上節課也已經講解了,在此不加贅述。 
這里需要注意的一點是,keras的API中并沒有像PyTorch的API中的這個參數group,這樣的話,就無法衍生成GN和InstanceN層了,在之后的內容,會在Tensorflow_Addons庫中介紹
2.2 LN
tf.keras.layers.LayerNormalization(axis=-1,epsilon=0.001,center=True,scale=True,beta_initializer="zeros",gamma_initializer="ones",beta_regularizer=None,gamma_regularizer=None,beta_constraint=None,gamma_constraint=None,trainable=True,name=None,**kwargs )參數和BN的參數基本一致。直接看一個例子:
import?tensorflow?as?tf import?numpy?as?np x?=?tf.constant(np.arange(10).reshape(5,2)*10,dtype=tf.float32) print(x) y?=?tf.keras.layers.LayerNormalization(axis=1) print(y(x))運行結果為:
tf.Tensor( [[?0.?10.][20.?30.][40.?50.][60.?70.][80.?90.]],?shape=(5,?2),?dtype=float32) tf.Tensor( [[-0.99998??0.99998][-0.99998??0.99998][-0.99998??0.99998][-0.99998??0.99998][-0.99998??0.99998]],?shape=(5,?2),?dtype=float32)我在之前的文章中已經介紹過了LN,BN,GN,IN這幾個歸一化層的詳細原理,不了解的可以看本文最后的相關鏈接中找一找。
- END -往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯總結
以上是生活随笔為你收集整理的【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【经验分享】非科班出身怎么转行计算机?
- 下一篇: 【Python基础】Python正则表达
