池化層夾在連續的卷積層中間, 用於壓縮資料和引數的量。
簡而言之,如果輸入是影象的話,那麼池化層的最主要作用就是壓縮影象。
個人理解的同resize方法類似(雙線性插值法,鄰近法),只不過池化層用的是取最大值法。
個人覺得主要是兩個作用:
invariance(不變性),這種不變性包括translation(平移),rotation(旋轉),scale(尺度)
保留主要的特徵同時減少引數(降維,效果類似pca)和計算量,防止過擬合,提高模型泛化能力
a: 特徵不變性,也就是我們在影象處理中經常提到的特徵的尺度不變性,池化操作就是影象的resize,平時一張狗的影象被縮小了一倍我們還能認出這是一張狗的**,這說明這張影象中仍保留著狗最重要的特徵,我們一看就能判斷影象中畫的是乙隻狗,影象壓縮時去掉的資訊只是一些無關緊要的資訊,而留下的資訊則是具有尺度不變性的特徵,是最能表達影象的特徵。
b. 特徵降維,我們知道一幅影象含有的資訊是很大的,特徵也很多,但是有些資訊對於我們做影象任務時沒有太多用途或者有重複,我們可以把這類冗餘資訊去除,把最重要的特徵抽取出來,這也是池化操作的一大作用
引數是四個,和卷積很類似:
第乙個引數value:需要池化的輸入,一般池化層接在卷積層後面,所以輸入通常是feature map,依然是[batch, height, width, channels]這樣的shape
第二個引數ksize:池化視窗的大小,取乙個四維向量,一般是[1, height, width, 1],因為我們不想在batch和channels上做池化,所以這兩個維度設為了1
第三個引數strides:和卷積類似,視窗在每乙個維度上滑動的步長,一般也是[1, stride,stride, 1]
第四個引數padding:和卷積類似,可以取』valid』 或者』same』
返回乙個tensor,型別不變,shape仍然是[batch, height, width, channels]這種形式
import tensorflow as tf
import numpy as np
# [ batch, in_height, in_weight, in_channel ]
input_data = np.random.randn(32,
32).reshape(1,
32,32,
1)# [ filter_height, filter_weight, in_channel, out_channels ]
# 8: 輸出有 8 個 1: 同 input_data 中的 1 對應
filter_ = np.random.randn(5,
5,8)
.reshape(5,
5,1,
8)# 一層卷積
conv = tf.nn.conv2d(input_data, filter_, strides=[1
,1,1
,1], padding=
'valid'
)# valid:不會補0。 28如何得到的: 32 - 5 + 1,寬度和高度的shape變化都是這個公式
# same:補0,得到的就是 32 * 32 同輸入一樣的大小。
# (1, 28, 28, 8)
print
(conv.shape)
# 池化層, 此函式引數同 tf.nn.conv2d 一樣
# [1, 2, 2, 1]: 輸入:1 高度:2 寬度:2 channel:1
max_pool = tf.nn.max_pool(conv, ksize=[1
,2,2
,1], strides=[1
,2,2
,1], padding=
"same"
)# (1, 14, 14, 8)
print
(max_pool.shape)
# 啟用層,不改變維度
relu = tf.nn.relu(max_pool)
# (1, 14, 14, 8)
print
(relu.shape)
# dropout
dropput = tf.nn.dropout(relu, keep_prob=
0.6)
# (1, 14, 14, 8)
print
(dropput.shape)
# 第二層卷積
# 高度:5 寬度:5 輸入8:同dropout中的8 輸出:20
filter2_ = np.random.randn(5,
5,8,
20)conv2 = tf.nn.conv2d(dropput, filter2_, strides=[1
,1,1
,1], padding=
'valid'
)# (1, 10, 10, 20)
print
(conv2.shape)
# 池化層
# [1, 2, 2, 1]: 輸入:1 高度:2 寬度:2 channel:1
max_pool = tf.nn.max_pool(conv2, ksize=[1
,2,2
,1], strides=[1
,2,2
,1], padding=
"same"
)# (1, 5, 5, 20)
print
(max_pool.shape)
## # 啟用層
# sigmoid = tf.nn.sigmoid(max_pool)
# # (1, 5, 5, 20)
# print(relu.shape)
## # dropout
# dropput2 = tf.nn.dropout(sigmoid, keep_prob=0.5)
# # (1, 5, 5, 20)
# print(dropput.shape)
## # 全連線層
# # 500: 上面:5*5*20
# dense = np.random.randn(500, 120)
# fc = tf.reshape(dropput2, shape=[1, 5*5*20])
# conn = tf.matmul(fc, dense)
# # (1, 120)
# print(conn.shape)
## # out輸出層
# w = np.random.randn(120, 9)
## b = np.random.randn(9)
## out = tf.matmul(conn, w) + b
# # (1, 9)
# print(out.shape)
池化層作用
池化層主要有以下幾個作用 a 降維 b 實現非線性 c 可以擴大感知野 d 可以實現不變性 平移不變性,旋轉不變性,尺度不變性 個人覺得主要是兩個作用 1.invariance 不變性 這種不變性包括translation 平移 rotation 旋轉 scale 尺度 2.保留主要的特徵同時減少引...
卷積神經網路池化層和卷積層作用
個人覺得主要是兩個作用 1.invariance 不變性 這種不變性包括translation 平移 rotation 旋轉 scale 尺度 2.保留主要的特徵同時減少引數 降維,效果類似pca 和計算量,防止過擬合,提高模型泛化能力 1 translation invariance 這裡舉乙個直...
池化層的知識
卷積神經網路的乙個重要概念就是池化層,一般是在卷積層之後。池化層對輸入做降取樣,常用的池化做法是對每個濾波器的輸出求最大值,平均值,中位數等。池化的特點之一就是它輸出乙個固定大小的矩陣,這對分類問題很有必要。例如,如果你用了100個濾波器,並對每個輸出使用最大池化,那麼無論濾波器的尺寸是多大,也無論...