用python實現卷積神經網路 im2col函式

2021-10-23 01:20:06 字數 2173 閱讀 6587

卷積神經網路的核心之一——卷積運算,常用到函式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哈勃定律描述了宇宙膨脹的奧秘,自然界的大部分現象和規律都可以用數學函式來描述,也就是可以求得乙個函式。神經網路 簡單又...