vgg 16模型的内存和参数量的计算
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模型的内存和参数量的计算相关推荐
- 卷积神经网络参数量和计算量内存计算
卷积神经网络参数量和计算量内存计算 参数量 计算量 内存 参数量 每一次卷积的参数量和特征图的大小无关,仅和卷积核的大小,偏置及BN有关. 1.每个卷积层的参数量,+1表示偏置: Co x (Kw x ...
- 深度学习中参数量与计算量的理解
接下来要分别概述以下内容: 1 首先什么是参数量,什么是计算量 2 如何计算 参数量,如何统计 计算量 3 换算参数量,把他换算成我们常用的单位,比如:mb 4 对于各个经典网络,论述他们是计算量大还 ...
- 神经网络参数量的计算:以UNet为例
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:Hello王叔叔 知乎链接:https://zhuanlan.zhihu.c ...
- 卷积神经网络的参数量和计算量
<卷积神经网络的参数量和计算量> 对于在端部署的模型来说,模型的参数量以及计算量是锱铢必较的,使用什么样的激活函数,会有多大的计算成本.对于模型的压缩量化等都是模型的参数量和计算量的准 ...
- 卷积层计算量(FLOPS)和参数量的计算
1.卷积参数量的计算,若卷积层的输入featuremap的维度为Cin×Hin×Win,卷积核的大小为K1×K2, padding=P1×P2, stride=S1×S2,卷积核(filter)的数量 ...
- 卷积层和全连接层的区别_CNN卷积层、全连接层的参数量、计算量
我们以VGG-16为例,来探讨一下如何计算卷积层.全连接层的参数量.计算量.为了简单.直观地理解,以下讨论中我们都会忽略偏置项,实践中必须考虑偏置项. [卷积层的参数量] 什么是卷积层的参数? 卷积层 ...
- 卷积核的参数量和计算量
卷积核的参数量和计算量 1. 参数量计算 1.1 普通卷积 输入特征图尺寸 CxHxW 输出特征图尺寸 OxHxW 卷积核尺寸 kxkxC(O个kxkxC的卷积) 权重 kxkxCxO 偏置 O BN ...
- 【视频课】Pytorch模型分析进阶(可视化,参数量与计算量,计算速度)
课程内容 本次课程内容是Pytorch的高阶使用部分,要求大家预先要熟练掌握Pytorch.总课程大纲包括Pytorch模型结构的分析,Pytorch模型速度与计算量分析,Pytorch模型可视化3部 ...
- 神经网络参数量和计算量,神经网络计算公式
1.BP人工神经网络 人工神经网络(artificialneuralnetwork,ANN)指由大量与自然神经系统相类似的神经元联结而成的网络,是用工程技术手段模拟生物网络结构特征和功能特征的一类人工 ...
最新文章
- 我的世界java刷怪数量_我的世界Minecraft源码分析(1):刷怪逻辑
- npm run buil构建后页面白屏_从Npm Script到Webpack,6种常见的前端构建工具对比
- C语言棋盘中的正方形,C语言DFS(4)____棋盘问题
- 2015年百度之星初赛(1) --- D KPI
- 程序从高版本降到2.0,数据集报错 TypedTableBase
- python常用进制转换の方法
- qt connect函数_Qt官方示例广播发送器
- 第四周作业二_单元测试
- 如何进行手机web远程调试——chrome beta
- Python学习之路28-符合Python风格的对象
- 【PAT】1009. 说反话 (20)
- SPC控制图的样品子组大小为什么建议为5
- 利用Think远程代码执行漏洞进行脱库上传免杀木马情报
- 红外图像、灰度图像、深度图像对比
- 如何修改网络游戏服务器端的数据,网络游戏服务器端编程:数据操纵语句
- App中使用微信公众号的模版消息来进行消息推送
- Coursera machine learning week 6 excise
- 【Python+Appium】开展自动化测试(七)截图方法
- Java主要应用于哪些方面 Java就业方向有哪些
- Debug Blocker