池化層的作用

2021-10-06 08:33:51 字數 3529 閱讀 6521

池化層夾在連續的卷積層中間, 用於壓縮資料和引數的量。

簡而言之,如果輸入是影象的話,那麼池化層的最主要作用就是壓縮影象。

個人理解的同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個濾波器,並對每個輸出使用最大池化,那麼無論濾波器的尺寸是多大,也無論...