卷積神經網路的核心之一——卷積運算,常用到函式im2col。它將包含批數量的4維資料轉換成2維資料,以適應展開的濾波器。
im2col 的**如下:
def
im2col
(input_data, filter_h, filter_w, stride=
1, pad=0)
:"""
parameters
----------
input_data : 由(資料量, 通道, 高, 長)的4維陣列構成的輸入資料
filter_h : 濾波器的高
filter_w : 濾波器的長
stride : 步幅
pad : 填充
returns
-------
col : 2維陣列
"""n, c, h, w = input_data.shape
out_h =
(h +
2*pad - filter_h)
//stride +
1 out_w =
(w +
2*pad - filter_w)
//stride +
1 img = np.pad(input_data,[(
0,0)
,(0,
0),(pad, pad)
,(pad, pad)],
'constant'
) col = np.zeros(
(n, c, filter_h, filter_w, out_h, out_w)
)for y in
range
(filter_h)
: y_max = y + stride*out_h
for x in
range
(filter_w)
: x_max = x + stride*out_w
col[:,
:, y, x,:,
:]= img[:,
:, y:y_max:stride, x:x_max:stride]
col = col.transpose(0,
4,5,
1,2,
3).reshape(n*out_h*out_w,-1
)return col
首先介紹一下卷積運算的基本過程:
為簡單起見,假設我們現有乙個2通道66的資料,相應的,有2個22的濾波器a、b。
以步長2進行卷積運算後,對應位置的數相加
最後得到乙個3*3的矩陣
以上是卷積運算的基本過程。下面是**實現部分的重點。
col[:,
:, y, x,:,
:]= img[:,
:, y:y_max:stride, x:x_max:stride]
y、x為濾波器的索引值,本例中y、x均為0或1。即(0,0)(0,1)(1,0)(1,1)。col的後兩個冒號,即第4、5維資料,儲存與濾波器(y,x)處的值進行卷積的img中的資料:
如圖:陰影處表示與濾波器(0,0)處的值a1進行卷積的值
下面將4維資料轉化成2維資料
col = col.transpose(0,
4,5,
1,2,
3).reshape(n*out_h*out_w,-1
)
由前面的過程可知,每乙個濾波器的乙個值與out_heightout_weight個值相乘,將這幾個值排成1列,同乙個濾波器的所有值乘完後排在同一行。所有通道排在同一行。所以一行共有channelfhfw,本例為222,共有nout_heightout_weight行,本例為13* 神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...
卷積神經網路 有趣的卷積神經網路
一 前言 最近一直在研究深度學習,聯想起之前所學,感嘆數學是一門樸素而神奇的科學。f g m1 m2 r 萬有引力描述了宇宙星河運轉的規律,e mc 描述了恆星發光的奧秘,v h d哈勃定律描述了宇宙膨脹的奧秘,自然界的大部分現象和規律都可以用數學函式來描述,也就是可以求得乙個函式。神經網路 簡單又...