关于3DCNN卷积网络卷积网络结构以及参数变化
以下是使用3DCNN的相关代码
model = Sequential()
model.add(Conv3D(32, (3, 3, 5), activation='gelu',input_shape = (75, 55, 88, 1)))
model.add(BatchNormalization())
model.add(MaxPool3D((2, 2, 2)))
model.add(Conv3D(32, (3, 3, 5), activation='gelu'))
model.add(BatchNormalization())
model.add(MaxPool3D((2, 2, 2)))
model.add(Conv3D(32, (3, 3, 5), activation='gelu'))
model.add(BatchNormalization())
model.add(MaxPool3D((2, 2, 2)))
model.add(Flatten())
#model.add(Dense(60, activation='relu'))
model.add(Dense(512, activation='gelu',kernel_regularizer=regularizers.l2(0.003),activity_regularizer=regularizers.l1(0.005)))
#model.add(Dropout(0.5))
model.add(Dense(4))
3DCNN卷积
过程中的一般形式
静态图片描述:
(a)、(b)图分别表示单通道与多通道的2D卷积操作,其特点即L(Input_shape)=L(kernel),(c)图为3D卷积操作卷积核的深度<输入数据的深度,在同一深度操作完成之后会根据stride跳入下一深度继续进行卷积操作。
动态图片描述:
如图所示更加直观的3D卷积CNN网络
3D卷积的参数量以及output_shape
model.add(Conv3D(32, (3, 3, 5), activation='gelu',input_shape = (75, 55, 88, 1)))
输入的数据尺寸=(75,55,88,1)
卷积核大小=(3,3,5)×32
默认stride=(1,1,1)
卷积后尺寸计算
假设输入的特征图(feature map)的shape为[Height, Weight, Channel],对应的字母表示为: [ H − i n , W − i n , C − i n ] [ H_-in , W_-in,C_-in] [H−in,W−in,C−in];
- 卷积核(kernel)的shape为: [ H k , W k ] [ H_k , W_k] [Hk,Wk];
- 滤波器(filter)的shape为: [ C − o u t , H − o u t , W − o u t , C − i n ] [ C_-out,H_-out , W_-out,C_-in] [C−out,H−out,W−out,C−in]
- 输出的feature_map的shape为: [ H − o u t , W − o u t , C − o u t ] [ H_-out , W_-out,C_-out] [H−out,W−out,C−out]
- padding: [ P 1 , P 2 ] [P_1,P_2] [P1,P2]
- stride:
[
S
1
,
S
2
]
[S_1,S_2]
[S1,S2]
按照公式:
H − o u t = ( H − i n + 2 P 1 − H k ) / S 1 + 1 H_-out=(H_-in+2P_1-H_k)/S_1\ +1 H−out=(H−in+2P1−Hk)/S1 +1
W − o u t = ( W − i n + 2 P 2 − W k ) / S 2 + 1 W_-out=(W_-in+2P_2-W_k)/S_2\ +1 W−out=(W−in+2P2−Wk)/S2 +1
变量数的计算
根据公式:
- 卷积核参数量: H x × W k H_x×W_k Hx×Wk
- 滤波器的参数量: C − o u t × H k × W k × C − i n C_-out\times H_k\times W_k\times C_-in C−out×Hk×Wk×C−in
- bias参数量: C − o u t C_-out C−out
- 总的参数量: C − o u t × H k × W k × C i n + C − o u t C_-out\times H_k\times W_k\times C_in+C_-out C−out×Hk×Wk×Cin+C−out
Layer(type) | outputshape | param |
---|---|---|
conv3d (Conv3D) | (None,73,53,84,32) | 1472 |
conv3d由上式计算可得:
shape:(75-3+2×0)/1+1=73,(55-3+2×0)/1+1=55,(88-5+2×0)/1+1,32
param:(3×3×5+1)×32=1472
batch_Normalization
计算过程:
故其shape不会发生变化
参数量:BatchNormalization 一般接在卷积层后面,对每个通道都有gamma、beta、mean、variance四个参数(mean、variance是Non-trainable Parameters,不会随着训练更新)。因此,BatchNormalization的参数量=4x上一层的输出的通道数。
因此其参数量:32×4=128
https://www.zhihu.com/search?type=content&q=batchnormalization%E5%8F%82%E6%95%B0%E9%87%8F%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97
MaxPool3D层的参数计算
max3Dpool为最大池化操作,即选取特定尺寸下的最大值,
当最后的尺寸,小于最大池化的特征尺寸时,即舍去该部分多余尺寸,文章来源:https://www.toymoban.com/news/detail-762105.html
model.add(MaxPool3D((2, 2, 2)))
output_shape=(36,26,42,32)文章来源地址https://www.toymoban.com/news/detail-762105.html
到了这里,关于关于3DCNN卷积网络卷积网络结构以及参数变化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!