关于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,000

TOTAL 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:训练和测试时的内存组理解全连接层采用1×1的卷积核全卷积神经网络(FCN)深度学习中的批标准化(batch normalization)

vgg16卷积层的计算量_vgg16模型参数量和使用的的内存计算相关推荐

  1. vgg16卷积层的计算量_深度学习_经典网络_VGG16和ResNet152哪个参数量更多

    首先,我们我们知道深度学习中网络的计算量代表时间复杂度,参数量代表空间复杂度. 从ResNet的论文中可知(ResNet论文可在这个文章中的第六部分找到)152层的残差网络在时间复杂度上和VGG16是 ...

  2. 深度学习模型参数量/计算量和推理速度计算

    作者|龟壳 来源 | 知乎 地址 | https://zhuanlan.zhihu.com/p/376925457 本文仅作学术分享,若侵权请联系后台删文处理 本文总结了一些关于模型参数量计算以及推理 ...

  3. vgg16卷积层的计算量_卷积神经网络VGG16详解

    VGG网络图如下,本文要深入讲解的是很常用的VGG16网络.在看懂VGG16网络之前,先补一下卷积神经网络的知识,然后用代码实例来更好说明VGG16网络 VGG网络 图片数据如何输入? 彩色图像有RG ...

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

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

  5. PyTorch计算损失函数对模型参数的Hessian矩阵

    前言 在实现Per-FedAvg的代码时,遇到如下问题: 可以发现,我们需要求损失函数对模型参数的Hessian矩阵. 模型定义 我们定义一个比较简单的模型: class ANN(nn.Module) ...

  6. 用计算机计算电力系统故障,三相参数不对称电力系统断线故障的计算机计算

    三相参数不对称电力系统断线故障的计算机计算 论述了三相参数不对称电力系统的数学模 (本文共5页) 阅读全文>> 论述了三相参数不对称电力系统的数学模... (本文共4页) 阅读全文> ...

  7. vgg16卷积层的计算量_卷积神经网络VGG16参数数量的计算和理解

    先说一下我对神经网络的理解:神经网络就是用巨量的简单的非线性函数组合起来拟合复杂的未知函数.比如,人类识别不同的物体.识别不同动物.不同植物是个复杂的未知函数.虽然未知,但没事,我们的神经网络可以用巨 ...

  8. 卷积层的相关概念 与 卷积层输出图片大小计算

    本文内容 常见问题:听课时感觉听懂了,一些代码,发现啥都不懂,各个参数的数值应如何指定呢? 本文会以Pytorch为例,讲解CNN过程中各个参数应如何计算 卷积层的相关概念 图片的channel:图片 ...

  9. CNN网络中卷积层的正向传播与反向传播理解

    1. 基础理论 1.1 网络结构梳理 在CNN网络模型是建立在传统神经网络结构上的,对于一个传统的神经网络其结构是这样的: 从上面可以看出,其模型是全连接的.若是使用一幅512*512大小的图像作为输 ...

最新文章

  1. 推理集 —— 物质与成分及性质的研究
  2. BZOJ 4032: [HEOI2015]最短不公共子串(后缀自动机+记忆化搜索)
  3. 下次激活策略10_巅峰武侠卡牌巨制手游乱世江湖1元商城特权bt版今日10:00上线_乱世江湖...
  4. gimp修改图片部分区域的对比度
  5. android自定义view生命周期,android基础之自定义view
  6. as3 physaxe 2d 物理引擎
  7. 建立一颗二叉排序树,并删除该二叉排序树上的某个节点
  8. 浅谈点击信号对搜索的影响
  9. javascript系统系列:浅析js中的浏览器循环事件(eventLoop)
  10. Oracle 11g vs 12c 内存、优化器等默认参数对比
  11. python之--工具类方法
  12. python的内存模型
  13. 如何将安卓数据同步到Mac电脑上
  14. java关键字const_java 关键字详解
  15. 百度网盘破解版下不了大文件
  16. Echarts地图合并提取
  17. mysql统计字数_使用SQL确定文本字段的字数统计
  18. Kinect的Kinect Manager脚本简介
  19. TP90、TP95、TP99性能指标含义及计算
  20. Byte历险记(tomcat+web游历)

热门文章

  1. 你最爱记混的slice()和splice()
  2. Layui lay-skin=switch 表格修改状态
  3. NetworkManager——linux强大的网络管理工具
  4. [Python]学以致用爬取豆瓣小组租房信息
  5. TreeSizeFree磁盘文件管理工具
  6. 估值报告写作第一讲——第五届CVA估值建模精英计划
  7. 用python做股票智能投顾模型_如何用Python建模GGM模型并对股票估值?
  8. 各大家装企业中台化策略与布局
  9. Android上海找工作经历分享,半月收获10余offer,收藏起来金三银四面试旺季捞份offer走
  10. druid连接池 driver-class-name 自动识别列表