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

此外,还有个比较有争议的点,评论区里也有人指出,关于全连接中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 14x14x6 0
Conv2 14x14x6 5x5x16 1 0 10x10x16 5x5x6x16+16 2416
MaxPool2 10x10x16 2x2 2 0 5x5x16 0
FC1 5x5x16 120 5x5x16x120+1 48001
FC2 120 84 120x84+1 10081
FC3 84 10 84x10+1 841
参数总量: 61495
参数内存消耗: 240.214KB

AlexNet
Alexnet的结构图有些奇怪。但其实是因为要把网络拆分到两个GPU上,才画成了两层,两层的结构是一样的,下面计算的时候的结构相当于合并以后的网络。

网络层(操作) 输入 filter stride padding 输出 计算公式 参数量
Input 227x227x3 227x227x3 0
Conv1 227x227x3 11x11x96 4 0 55x55x96 11x11x3x96+96 34944
MaxPool1 55x55x96 3x3 2 0 27x27x96 0
Norm1 27x27x96 27x27x96 0
Conv2 27x27x96 5x5x256 1 2 27x27x256 5x5x96x256+256 614656
MaxPool2 27x27x256 3x3 2 0 13x13x256 0
Norml2 13x13x256 13x13x256 0
Conv3 13x13x256 3x3x384 1 1 13x13x384 3x3x256x384+384 885120
Conv4 13x13x384 3x3x384 1 1 13x13x384 3x3x384x384+384 1327488
Conv5 13x13x384 3x3x256 1 1 13x13x256 3x3x384x256+256 884992
MaxPool3 13x13x256 3x3 2 0 6x6x256 0
FC6 6x6x256 4096 6x6x256x4096+1 37748737
FC7 4096 4096 4096x4096+1 16777217
FC8 4096 1000 4096x1000+1 4096001
参数总量: 62369155
参数内存消耗: 237.9195MB

VGG
VGG常见有16层和19层的,这里以16层为例,下面是模型结构图。

网络层(操作) 输入 filter stride padding 输出 计算公式 参数量
Input 224x224x3 224x224x3 0
Conv3-64 224x224x3 3x3x64 1 1 224x224x64 3x3x3x64 + 64 1792
Conv3-64 224x224x64 3x3x64 1 1 224x224x64 3x3x64x64 + 64 36928
MaxPool2 224x224x64 2x2 2 0 112x112x64 0
Conv3-128 112x112x64 3x3x128 1 1 112x112x128 3x3x64x128 + 128 73856
Conv3-128 112x112x128 3x3x128 1 1 112x112x128 3x3x128x128 + 128 147584
MaxPool2 112x112x128 2x2 2 0 56x56x128 0
Conv3-256 56x56x128 3x3x256 1 1 56x56x256 3x3x128x256 + 256 295168
Conv3-256 56x56x256 3x3x256 1 1 56x56x256 3x3x256x256 + 256 590080
Conv3-256 56x56x256 3x3x256 1 1 56x56x256 3x3x256x256 + 256 590080
MaxPool2 56x56x256 2x2 2 0 28x28x256 0
Conv3-512 28x28x256 3x3x512 1 1 28x28x512 3x3x256x512 + 512 1180160
Conv3-512 28x28x512 3x3x512 1 1 28x28x512 3x3x512x512 + 512 2359808
Conv3-512 28x28x512 3x3x512 1 1 28x28x512 3x3x512x512 + 512 2359808
MaxPool2 28x28x512 2x2 2 0 14x14x512 0
Conv3-512 14x14x512 3x3x512 1 1 14x14x512 3x3x512x512 + 512 2359808
Conv3-512 14x14x512 3x3x512 1 1 14x14x512 3x3x512x512 + 512 2359808
Conv3-512 14x14x512 3x3x512 1 1 14x14x512 3x3x512x512 + 512 2359808
MaxPool2 14x14x512 2x2 2 0 7x7x512 0
FC1 7x7x512 4096 7x7x512x4096 + 1 102760449
FC2 4096 4096 40964096 + 1 16777217
FC3 4096 1000 4096
1000 + 1 4096001
参数总量: 138357544 138348355
参数内存消耗: 527.7570MB

GoogleNet
googlenet 提出了inception的概念,用于增加网络深度和宽度,提高深度神经网络性能。下面是googlenet的网络结构:

inception的结构如下:

可以看出,inception的结构是多个卷积堆叠,组合而成的。

还有,从上面的网络结构中,可以看到一共有三个输出的分类层:

这个是为了解决深层网络训练的时候梯度消失的问题,所以在中间加入了几个全连接层辅助训练。
最后,贴一个论文上给出的模型的结构图:

在这个图上,已经给出了参数的数量和使用的内存,不过我还是说一下inception模块的计算方法和一些注意事项。

首先是输入,输入的size应该为224x224x3
注意第一层的卷积,没有注明padding,直接算的话,结果是不对的,这里的padding计算方法和tensorflow中卷积方法padding参数设置为’SAME’是一样的。简单来说,就是ceil(size/kernel_size),这个对于下面的计算也是一样的,总之,就是要填适当的0,使得输出结果和上图相对应就是了。
3.在上图中5~10列对应inception module中的各个卷积操作,对应的值是输出的feature的数量,对于maxpool操作,他的padding为2,stride为1。
4.当一个inception模块计算完后,它的输出为各个卷积操作输出的结果连接起来,也就是如果输出分别为28x28x64、28x28x128、28x28x32、28x28x32,那么最终输出就是28x28x(63+128+32+32)。
下面的图给出了inception module内部计算的输出结果。

可以看出googlenet的参数量要比vgg少很多,但是效果确更优秀。

Resnet
关于resnet,我就不打算计算参数了,因为实在量很大,而且实际上,resnet的基本结构也比较简单,计算方法和前面的没什么差别。这里就简单贴一下结构图好了。

可以看出来,如果没有中间一条条连线,其实就是一个很深的普通的卷积网络,中间的连线可以保证梯度可以传递到低层,防止梯度消失的问题。

                            </div><link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-095d4a0b23.css" rel="stylesheet"></div>

1
2
3

2021-09-10 参数计算相关推荐

  1. 《惢客创业日记》2021.09.15(周三)套路的最高境界

    今天,凉粉儿给我发了一段她想的关于惢客的宣传词:"你被套路过吗?想不再被套路吗?上惢客."总结一句话是"不被套路上惢客".我觉得能把惢客跟套路联系在一起,很贴切 ...

  2. 2021.09青少年软件编程(Python)等级考试试卷(三级)

    2021.09青少年软件编程(Python)等级考试试卷(三级) 一.单选题(共25题,每题2分,共50分) 1.使用map函数可以实现列表数据元素类型的转换,而无需通过循环.则将列表L=['1',' ...

  3. matlab2018中变压器模块,利用MATLAB中Sim+Power+Systems模库时变压器模型的参数计算及其仿真结果比较...

    [实例简介] 变压器模型 matlab 仿真 参数计算 第21卷第1期向秋风,等:利用 MATLAB中 Sim Power System模库时变压器模型的参数计算及其仿真结果比较 17 其标幺值:R= ...

  4. 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)

    卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习) 分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算. 以AlexNet网络为例,以下是该网络的参数结构图. A ...

  5. 卷积神经网络中的参数计算

    举例1: 比如输入是一个32x32x3的图像,3表示RGB三通道,每个filter/kernel是5x5x3,一个卷积核产生一个feature map,下图中,有6个5x5x3的卷积核,故输出6个fe ...

  6. 卷积神经网络参数计算及卷积层输出尺寸计算

    一.卷积神经网络参数计算 CNN一个牛逼的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数,所谓权值共享就是同一个Feature Map中神经元权值共享,该Feature Map中的所 ...

  7. 基于matlab的图解粒度参数计算,基于MATLAB的图解粒度参数计算-热带地理.PDF

    基于MATLAB的图解粒度参数计算-热带地理 第 26卷 第 3期 热 带 地 理 Vol26,No3 2006年 8月 TROP ICAL GEO GRA PHY Aug. , 2006 基于 MA ...

  8. 李迟2021年10月知识总结

    本文为 2021 年 10 月知识总结. 研发编码 C / C++ 无. golang 写了数字签名.数字信封的测试示例,了解了 RSA .AES 加解密,知道 AES 的密钥长度必须大于16字节. ...

  9. 2021.09.27 MySQL笔记

    2021.09.27 MySQL笔记 文章目录 2021.09.27 MySQL笔记 一.展示当前存在的所有数据库 二.使用(选中)一个数据库 三.创建一个数据表 四.查询并展示该数据库内的所有数据表 ...

  10. 2021年10月国产数据库排行榜:达梦反超OceanBase夺榜眼,TDSQL实现“四连增”,数据生态加速建设

    2021年10月国产数据库排行榜已在墨天轮发布,本月共有150家数据库参与排名.我们可以用"半江瑟瑟半江红"来形容10月份数据库分数涨跌情况.除去分数没有变化的数据库,分数上涨和下 ...

最新文章

  1. 【宋红康学习日记11】Object类与equals方法
  2. Delphi Form Designer (窗体设计器)之四
  3. python在哪里学比较好-Python哪里学习好?老男孩python入门
  4. ios 中的关联对象
  5. IDEA 每次运行项目时都提示源值1.5已过时,将在未来所有版本中删除
  6. 本地连接状态 属性按钮消失 解决过程(DCOM配置问题)(原创*转载留名)
  7. python和C语言分别实现插入排序
  8. 【渝粤教育】 国家开放大学2020年春季 2134成本会计 参考试题
  9. simbert文本相似度,短文本语义匹配模型
  10. java 线程定时器_Java线程之Timer定时器
  11. Unity的Animator中Transition有延迟的问题
  12. DriverMessageBean配置详解
  13. Spring Boot学习总结(30)—— Spring Native 初体验
  14. Flightgear操作方式以及几种典型飞机的起飞方法
  15. 中标麒麟V7安装Qt5.13.0
  16. 【毕设】requests+bs4+re 爬取知网文献来源的信息
  17. mybatis java事务_Mybatis事务处理
  18. 制作纯净系统U盘教程(详细版)
  19. java数字签名实现简单的动态秘钥
  20. 量化交易的十个知识点

热门文章

  1. flink cdc 2.2.1 mysql connector
  2. Web3的流支付代表Zebec,熊市布局的价值逻辑
  3. 实验四 类和对象;类的继承和派生;多态性; 接口;构造器应用
  4. 《软技能-代码之外的生存能力》第四篇——生产力
  5. 驰为 hi12 linux,PC商务体验 Intel四核平板驰为Hi12评测
  6. 2021-01-20JSON和本地存储
  7. python c++混合编程文档缩减版笔记 -2
  8. 精确讲述闭包及内存泄漏
  9. fri信号重构-sinc核滤波
  10. pd.diff()函数详解