计算卷积层需要学习训练的参数个数

右侧有目录,可坐电梯直达


问题引入:

我这个计算方法,绝对是最准确的一个,而且卷积层的参数个数跟步长strides、padding是valid还是same都毫无关系,你可以对照着model.summary()后的Param列,一层一层验证过去,我这边举个我自己的例子

计算方法:

输入图像的通道数×卷积核的尺寸×卷积核的个数+偏置(数值上等于卷积核的个数)

举例:

模型搭建

为了方便大家验证,我直接说明下我每一层卷积层的参数情况:

第一层(对应下图的conv2d_1):

第一层卷积层涉及到计算的各参数取值
输入图像的通道数3
卷积核的尺寸11x11
卷积核的个数48
偏置量(数值上等于卷积核的个数)48

计算:3x(11x11)x48+48=17472

验证:与生成的模型摘要里显示的Param一致

第二层(对应下图的conv2d_2):

第一层卷积层涉及到计算的各参数取值
输入图像的通道数48
卷积核的尺寸5x5
卷积核的个数128
偏置量(数值上等于卷积核的个数)128

计算:48x(5x5)x128+128=153728

验证:与生成的模型摘要里显示的Param一致

 

第三层、第四层、第五层同理,你们可以自己验证一下,肯定一致

 

model.summary()生成的模型摘要:

拓展:

我搜过BN层参数的计算方法,基本没见过哪个博文提到过,基本都是在“详解BN”、“BN层有什么用”、……,这边我说一下我的理解,可以用来自己目测Trainable Params

计算方法:输入到该BN层的图像的通道数×4

为什么是乘4,原因(个人理解,如果有错,希望各位评论区指正,一起交流学习):

BN层做批量归一化处理时,应用类似权值共享的策略,把每张特征图当做一个神经元,每张特征图都要学习四个参数:均值、方差、伽马(放缩系数)、贝塔(平移系数)

因为特征图的数量,在数值上与卷积核的个数一致,那在数值上就等于输入到该BN层的图像的通道数。(注意:我的BN层是接在卷积层之后了)

### 卷积神经网络中卷积层卷积参数计算 #### 参数计算公式 在卷积神经网络(CNN)中,卷积层卷积核(也称为滤波器或内核)参数量取决于几个因素:输入通道数 \( C_{\text{input}} \),输出通道数 \( C_{\text{output}} \),以及卷积核的空间维度 \( K_h \times K_w \)[^4]。 具体来说,单个卷积核的参数量由其空间尺寸和输入通道数目决定。如果考虑偏置项,则整个卷积层的总参数量可以通过下面的公式来表示: \[ \text{Total Parameters} = (K_h \cdot K_w \cdot C_{\text{input}} + 1) \cdot C_{\text{output}} \] 这里, - \( K_h \) 和 \( K_w \) 是卷积核的高度和宽度; - \( C_{\text{input}} \) 表示输入图像/特征图的通道数; - \( C_{\text{output}} \) 则代表该层产生的输出特征图的数量,也就是有多少个不同的卷积核被应用到同一位置上; - 加法中的 "+1" 对应于每个卷积核关联的一个偏置参数。 #### 实例说明 假设有一个卷积层配置如下: - 输入特征图大小为 \( 28\times28\times3 \) (例如RGB彩色图像) - 使用 \( 5\times5 \) 大小的卷积核 - 输出\( 6 \)张不同特性的特征图 则此情况下总的可训练参数数量为: \[ ((5 \cdot 5) \cdot 3 + 1)\cdot 6=76*6=456 \] 这意味着在这个特定设置下,卷积层共有456个权重加上对应的偏置需要学习调整。 ```python def calculate_conv_params(kernel_height, kernel_width, input_channels, output_channels): """ 计算给定规格下的卷积层参数总量 :param kernel_height: int, 卷积核高度 :param kernel_width: int, 卷积核宽度 :param input_channels: int, 输入通道数 :param output_channels: int, 输出通道数(即卷积核数量) :return: int, 总参数量 """ params_per_kernel = kernel_height * kernel_width * input_channels + 1 # 每个kernel及其bias total_parameters = params_per_kernel * output_channels # 所有kernels合计 return total_parameters # 测试函数 print(calculate_conv_params(5, 5, 3, 6)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值