卷积神经网络的参数计算

前言

这篇文章会简单写一下卷积神经网络上参数的计算方法,然后计算各个常见神经网络的参数。一个是加强对网络结构的了解,另一方面对网络参数的量级有一个大概的认识,也可以当作备忘录,免得想知道的时候还要再算。

此外,还有个比较有争议的点,评论区里也有人指出,关于全连接中bias(偏置)的计算,我看的一些资料里参数的数量是1,但是在用的深度学习框架中(tensorflow和pytorch)基本都是和输出层的元素的数量相同,我的看法的话,第二种可能效果更好一些吧,这样会有更高的自由度,或许有相关的论文,但是我没发现。不过这一点其实影响不大的,因为bias所占的参数量的比重很小,所以无论用哪种计算方法最终的结果基本没什么差别。

参数计算方法

全连接的参数计算就不说了,比较简单。
首先,简单说一下卷积网络的参数计算。下图中是一个32x32x3的输入,然后用一个5x5x3的卷积对其中某个位置的计算,这里算的是一个点积,所以输出是一个单独的标量的值。

因为卷积的操作是通过一个滑动窗口实现的,那么通过卷积操作,我们就得到了一个28x28x1的输出。

如果我有6个上面说的filter,那么,我就会得到一个28x28x6的输出。

这就是一个最基础的卷积操作,那么这里用到的参数是多少呢?我们只需要把每个filter的参数累加起来,当然,不要忘了加上bias:5x5x3x6 + 6 = 456

另外一个需要计算的就是进行卷积以后的输出的大小,从下面的图上看就很好理解了,用公式直接算就好了。其中N是输入图像的size,F是filter的size,stride是滑动的步长。

然后从上图中最后一个例子可以看到,stride大于1的时候不一定能整除,这个时候,就需要在原图像上加上一层padding层,这样图像的大小就变化了,然后再用前面的公式算就行了。

然后还有一个maxpooling操作,这个会改变输入输出,但是不会有参数。所以使用和计算卷积一样的公式算就行了。

LeNet

首先计算一下最简单的LeNet。网络结构如下:

网络层(操作) 输入 filter stride padding 输出 计算公式 参数量
Input 32x32x1 32x32x1 0
Conv1 32x32x1 5x5x6 1 0 28x28x6 5x5x1x6+6 156
MaxPool1 28x28x6 2x2 2 0
  • 138
    点赞
  • 703
    收藏
    觉得还不错? 一键收藏
  • 33
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值