keras實現分組卷積

2021-10-14 18:39:55 字數 1380 閱讀 3611

分組卷積在pytorch中比較容易實現,只需要在卷積的時候設定group引數即可

比如設定分組數為2

conv_group = nn.conv2d(c_in,c_out,kernel_size=

3,stride=

3,padding=

1,groups =

2)

但是,tensorflow中目前還沒有分組卷積,只能自己手動編寫分組卷積函式。

在編寫程式之前大家要先理解分組卷積的形式,也就是對特徵圖在通道上進行劃分,例如設定group=3,對輸入特徵圖通道劃分成三組,輸出特徵圖也要劃分成3組,再對三組輸入輸出特徵圖分別進行卷積。

實現過程如下:

1.獲取輸入特徵圖和輸出特徵圖通道數,再結合分組數進行劃分

2.對輸入特徵圖的每一組進行單獨卷積

3.將每組卷積後的結果進行通道上的拼接

**如下:

def

group_conv

(x, filters, kernel, stride, groups)

:

channel_axis =

1if k.image_data_format()==

'channels_first'

else-1

in_channels = k.int_shape(x)

[channel_axis]

#計算輸入特徵圖的通道數

nb_ig = in_channels // groups#對輸入特徵圖通道進行分組

nb_og = filters // groups#對輸出特徵圖通道進行分組

gc_list =

for i in

range

(groups)

:if channel_axis ==-1

: x_group = lambda(

lambda z: z[:,

:,:, i * nb_ig:

(i +1)

* nb_ig]

)(x)

else

: x_group = lambda(

lambda z: z[

:, i * nb_ig:

(i +1)

* nb_ig,:,

:])(x)

padding=

'same'

, use_bias=

false

)(x_group)

)#對每組特徵圖進行單獨卷積

return concatenate(axis=channel_axis)

(gc_list)

#在通道上進行特徵圖的拼接

Keras實現卷積神經網路

1 coding utf 8 2 3created on sun jan 20 11 25 29 201945 author zhen 6 78 import numpy as np 9from keras.datasets import mnist 10from keras.models impo...

Keras 2 3 keras實現卷積神經網路

cnn convolutional neural networks 卷積神經網路在 keras 上的 實現。用到的資料集還是mnist。不同的是這次用到的層比較多,匯入的模組也相應增加了一些。下面直接進入 部分 import numpy as np np.random.seed 1337 for r...

卷積網路keras實現的部分理解

參考 cnn簡介 原圖到特徵圖的對映 1.卷積有padding和stride,左上頂頭開始,直到遍歷完輸入影象的所有畫素 即使靠右靠下還有剩餘padding也不再計算 奇數影象stride 2,2 no padding卷積 先減1,再除以2。影象大小m m,核k k,stride s,輸出大小 m ...