一、池化層是什麼?
池化層是卷積神經網絡的重要組成部分,通過縮小特徵圖(feature map)的尺寸,減少網絡計算量,降低過擬合風險,從而提升機器學習的效率。同時,池化層也能夠升高網絡的視角,減輕對目標物體位置的依賴。池化層的主要作用有兩個:一是加速運算,二是提取顯著特徵,為後續的分類工作提供基礎。
二、Poly層
在池化層的基礎上,poly層是一種可以在本質上實現max pooling功能的變體。與max pooling不同的是,除了選擇一組最大值外,poly具有在特徵映射中提取多個顯着特徵的能力。這通過對特定區域上所有值的平均值進行計算後,再與一組最大值相結合進行實現。Poly層可以較好地保留局部顯著性,並通過提取有效特徵來提升網絡分類的準確性。
三、Max Pooling
max pooling作為一種常用的池化層方法,它簡單直接,易於實現,由於其能夠選取圖像局部區域內最大的特徵響應,從而對特徵視覺上進行了優化。算法效率高,能夠有效地減少網絡的參數數量和計算量,能夠減輕過擬合現象,保留特徵信息,快速提升物體識別性能。max pooling模塊常會使用2~3個超參數:池化窗口的大小、步長和padding方式,例如:
MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None, **kwargs)
四、Polluteing形式
polluteing層是一種特殊的池化層形式,與傳統的pooling層不同,它不僅考慮最大值,還對不同卷積核的響應進行權重平均。polluteing的獨特之處在於,在進行windows操作時,可以使用一些已知的複雜函數來代替原來的max或者average函數,增強層次性。表達式是一個積分,其中在原始數據的不同窗口上調用已知的映射函數。polluteing層具有一定的可變性,可以通過各種函數形式來實現區域查詢和特徵彙集,包括最大值、平均值、L2範數等。
代碼示例: x = tf.constant([ [[2.0], [1.0]], [[0.0], [3.0]] ]) pool = tf.nn.avg_pool( x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME" ) print(pool)
五、參數共享
池化層自己並沒有可訓練的參數,甚至記憶容易摧毀,它並不會把所有可知的東西存下來,而是嘗試着在每個池化濾波器上公用一個權重數組,這是一種參數共享技巧,同時使得模型的學習更為穩定和靈活,降低了過擬合的風險。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/230768.html