分組卷積在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 ...