cs231n上关于VGG-16模型的内存和参数的计算过程如下。

INPUT: [224x224x3]        memory:  224*224*3=150K   weights: 0
CONV3-64: [224x224x64]  memory:  224*224*64=3.2M   weights: (3*3*3)*64 = 1,728
CONV3-64: [224x224x64]  memory:  224*224*64=3.2M   weights: (3*3*64)*64 = 36,864
POOL2: [112x112x64]  memory:  112*112*64=800K   weights: 0
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M   weights: (3*3*64)*128 = 73,728
CONV3-128: [112x112x128]  memory:  112*112*128=1.6M   weights: (3*3*128)*128 = 147,456
POOL2: [56x56x128]  memory:  56*56*128=400K   weights: 0
CONV3-256: [56x56x256]  memory:  56*56*256=800K   weights: (3*3*128)*256 = 294,912
CONV3-256: [56x56x256]  memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
CONV3-256: [56x56x256]  memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
POOL2: [28x28x256]  memory:  28*28*256=200K   weights: 0
CONV3-512: [28x28x512]  memory:  28*28*512=400K   weights: (3*3*256)*512 = 1,179,648
CONV3-512: [28x28x512]  memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [28x28x512]  memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
POOL2: [14x14x512]  memory:  14*14*512=100K   weights: 0
CONV3-512: [14x14x512]  memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]  memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
CONV3-512: [14x14x512]  memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
POOL2: [7x7x512]  memory:  7*7*512=25K  weights: 0
FC: [1x1x4096]  memory:  4096  weights: 7*7*512*4096 = 102,760,448
FC: [1x1x4096]  memory:  4096  weights: 4096*4096 = 16,777,216
FC: [1x1x1000]  memory:  1000 weights: 4096*1000 = 4,096,000TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd)
TOTAL params: 138M parameters

如果动手算一下memory的和,如下。

0.15M+3.2M+3.2M+0.8M+1.6M+1.6M+0.4M+0.8M3+0.2M+0.4M3+0.1M*4+0.025M+0.004M+0.004M+0.001M = 15.184M

问题来了,计算得到的总内存为15.184*4 bytes ~=60MB / image,而教程中给的为93MB。并且教程中的数据(24M)被许多博客和文章所引用,导致经常看到的就是24M这个数据。起始该答案早在github上有针对教程中的疑问,并给出了如上手动计算的结果。所以,15M的memory才是正确的答案。    另外上述针对参数(weight)的计算中并没有加入bias的数量。

延伸1:模型的组成

参数的数量约为138M(不包含bias),此时占用的内存大小为:138M*4 bytes ~=526M,该大小约等于保存后模型占用磁盘的大小,而实际利用ImageNet训练出来的VGG-16的模型大小超过552M。那么差的20多M内存哪去了,此处不局限于该模型的探讨,而是想更一般化的探讨模型中的成分。

由上可知,模型中主要是权重和偏移单元,如vgg-16加上偏移向量后的参数计算结果如下。然后是优化器和其他特殊层中的参数,如LeakyReLU,BN,和Dropout等的参数,如keras中的model。

conv3-64  x 2       : 38,720
conv3-128 x 2       : 221,440
conv3-256 x 3       : 1,475,328
conv3-512 x 3       : 5,899,776
conv3-512 x 3       : 7,079,424
fc1                 : 102,764,544
fc2                 : 16,781,312
fc3                 : 4,097,000
TOTAL               : 138,357,544

其中全连接的计算为:

 fc1 (x): (512x7x7)x4,096 (weights) + 4,096 (biases)fc2    : 4,096x4,096     (weights) + 4,096 (biases)fc3    : 4,096x1,000     (weights) + 1,000 (biases)

延伸2:训练和测试时的内存组成

图片来自这里

vgg 16模型的内存和参数量的计算相关推荐

  1. 卷积神经网络参数量和计算量内存计算

    卷积神经网络参数量和计算量内存计算 参数量 计算量 内存 参数量 每一次卷积的参数量和特征图的大小无关,仅和卷积核的大小,偏置及BN有关. 1.每个卷积层的参数量,+1表示偏置: Co x (Kw x ...

  2. 深度学习中参数量与计算量的理解

    接下来要分别概述以下内容: 1 首先什么是参数量,什么是计算量 2 如何计算 参数量,如何统计 计算量 3 换算参数量,把他换算成我们常用的单位,比如:mb 4 对于各个经典网络,论述他们是计算量大还 ...

  3. 神经网络参数量的计算:以UNet为例

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:Hello王叔叔 知乎链接:https://zhuanlan.zhihu.c ...

  4. 卷积神经网络的参数量和计算量

    <卷积神经网络的参数量和计算量>   对于在端部署的模型来说,模型的参数量以及计算量是锱铢必较的,使用什么样的激活函数,会有多大的计算成本.对于模型的压缩量化等都是模型的参数量和计算量的准 ...

  5. 卷积层计算量(FLOPS)和参数量的计算

    1.卷积参数量的计算,若卷积层的输入featuremap的维度为Cin×Hin×Win,卷积核的大小为K1×K2, padding=P1×P2, stride=S1×S2,卷积核(filter)的数量 ...

  6. 卷积层和全连接层的区别_CNN卷积层、全连接层的参数量、计算量

    我们以VGG-16为例,来探讨一下如何计算卷积层.全连接层的参数量.计算量.为了简单.直观地理解,以下讨论中我们都会忽略偏置项,实践中必须考虑偏置项. [卷积层的参数量] 什么是卷积层的参数? 卷积层 ...

  7. 卷积核的参数量和计算量

    卷积核的参数量和计算量 1. 参数量计算 1.1 普通卷积 输入特征图尺寸 CxHxW 输出特征图尺寸 OxHxW 卷积核尺寸 kxkxC(O个kxkxC的卷积) 权重 kxkxCxO 偏置 O BN ...

  8. 【视频课】Pytorch模型分析进阶(可视化,参数量与计算量,计算速度)

    课程内容 本次课程内容是Pytorch的高阶使用部分,要求大家预先要熟练掌握Pytorch.总课程大纲包括Pytorch模型结构的分析,Pytorch模型速度与计算量分析,Pytorch模型可视化3部 ...

  9. 神经网络参数量和计算量,神经网络计算公式

    1.BP人工神经网络 人工神经网络(artificialneuralnetwork,ANN)指由大量与自然神经系统相类似的神经元联结而成的网络,是用工程技术手段模拟生物网络结构特征和功能特征的一类人工 ...

最新文章

  1. 我的世界java刷怪数量_我的世界Minecraft源码分析(1):刷怪逻辑
  2. npm run buil构建后页面白屏_从Npm Script到Webpack,6种常见的前端构建工具对比
  3. C语言棋盘中的正方形,C语言DFS(4)____棋盘问题
  4. 2015年百度之星初赛(1) --- D KPI
  5. 程序从高版本降到2.0,数据集报错 TypedTableBase
  6. python常用进制转换の方法
  7. qt connect函数_Qt官方示例广播发送器
  8. 第四周作业二_单元测试
  9. 如何进行手机web远程调试——chrome beta
  10. Python学习之路28-符合Python风格的对象
  11. 【PAT】1009. 说反话 (20)
  12. SPC控制图的样品子组大小为什么建议为5
  13. 利用Think远程代码执行漏洞进行脱库上传免杀木马情报
  14. 红外图像、灰度图像、深度图像对比
  15. 如何修改网络游戏服务器端的数据,网络游戏服务器端编程:数据操纵语句
  16. App中使用微信公众号的模版消息来进行消息推送
  17. Coursera machine learning week 6 excise
  18. 【Python+Appium】开展自动化测试(七)截图方法
  19. Java主要应用于哪些方面 Java就业方向有哪些
  20. Debug Blocker

热门文章

  1. 腾讯云联手宇信科技发布多个联合方案,全面助力金融科技自主可控
  2. 初阶数据结构前部分总结
  3. 按键精灵--日志记录功能和释放附件功能
  4. 带着兴趣去学习Linux
  5. 说起安全,阿里云总裁胡晓明为何愤懑又自信?
  6. 关于安时积分法的二阶RC模型
  7. cisco 2960-24基础配置
  8. 51岁的尹铭加入阳光财险任总经理,曾任蚂蚁集团副总裁
  9. 安装mongodb数据库
  10. STM32 ES8266上阿里云IOT MQTT实践【第四章】:MCU的应用范围