1. 程式人生 > >《TensorFlow:實戰Google深度學習框架》——6.3 卷積神經網路常用結構(池化層)

《TensorFlow:實戰Google深度學習框架》——6.3 卷積神經網路常用結構(池化層)

池化層在兩個卷積層之間,可以有效的縮小矩陣的尺寸(也可以減小矩陣深度,但實踐中一般不會這樣使用),co。池從而減少最後全連線層中的引數。

池化層既可以加快計算速度也可以防止過度擬合問題的作用。

池化層也是通過一個類似過濾器結構完成的,計算方式有兩種:

  1. 最大池化層:採用最大值操作計算的池化層
  2. 平均池化層:使用平均值操作計算的池化層

 池化層的過濾器也需要人工設定過濾器的尺寸、是否使用全0填充以及過濾器移動的步長等設定。

過濾器隻影響一個深度上的節點,所以它需要在深度這個維度移動,這一點與卷積層不同,卷積層的過濾器是橫跨整個深度的。

圖6-14展示了一個最大池化層的過程:


下邊例子是TensorFlow程式實現最大池化層:

# TF.nn.max_pool()實現了最大池化層,引數和tf.nn.conv2d類似
# ksize提供了過濾器的尺寸,strides提供了步長資訊,padding提供了是否使用全0填充。
pool = tf.nn.max_pool(actived_conv, ksize = [1, 3, 3, 1], strides = [1, 2, 2, 1], padding = 'SAME')

第一個引數輸入當前層的節點矩陣,這個矩陣是一個思維矩陣。

第二個引數過濾器(ksize)的尺寸是一個長度為4的一維陣列,但是這個陣列的第一個和最後一數必須為1。這意味著池化層的過濾器是不可以跨不同輸入樣例或者節點矩陣深度的。實際應用中,使用最多的過濾器尺寸為[1, 2, 2, 1]或者[1, 3, 3, 1]。

第三個引數strides步長,和tf.nn.conv2d函式中步長意義相同,第一維和最後一維也只能為1。

第四個引數padding表示是否用qu全0填充,'VALID'表示不填充,'SAME'表示用0填充

TensorFlow還提供了tf.nn.avg_pool()來實現平均池化層。tf.nn.avg_pool函式的呼叫格式和tf.nn.max_pool函式是一致的。