zoukankan      html  css  js  c++  java
  • feature map大小计算

    https://blog.csdn.net/qq_41997920/article/details/90246721

    在训练完一个网络保存模型以后,我常常会将最优的模型保存,放在文件夹中以备用到!但会想模型的大小是由什么决定的呢?其实我们的模型在我们确定网络结构以后就已经将模型的大小确定了。下面将具体介绍一下:

    这里写图片描述

    对于上图我们可以逐步计算

    feature map大小计算

    1. 输入:N0*C0*H0*W0

    2. 输出:N1*C1*H1*W1

    3. 输出的feature map大小:

    4. H1=(H0+2×pad−kernel_size) / stride+1

    5. W1=(W0+2×pad−kernel_size) / stride+1

    6. 当输入的H0 == W0时,公式可以简化为:

    7. H1=W1=(h + 2xpad - kernel_size) / stride + 1

    8. 注:当stride为1时,若pad=(kernel_size−1) / 2,那么经过计算后的feature map大小不变

    以LeNet-5为例

    下面是一个多通道图像的输入LeNet-5网络前向计算模拟图:

    LeNet-5

    • 网状立体格子表示kernel,其他颜色方图表示feature map(Input表示输入层,可以看做特殊的feature map)
    • 一个kernel对应一个feature map
    • 参数量主要为kernel大小
    • 每个kernel带一个bias

    整个网络占据权重的为Convolution/Innerproduct 两层,分别计算参数量为,:

    1. C1: 5 x 5 x 20 = 500,5x5卷积核, 20个feature map输出,20个kernel

    2. C2: 20x 5 x 5 x 50 = 25000 ,20维度输入,则20x5x5 kernel,50个feature map输出,即相当于20通道的图像输入,则需要20x5x5的kernel来卷积乘,50个这样的卷积核操作得到50个feature map,50个kernel

    3. F1: 50x4x4x500 = 400000,50维度特征图输入,全连接,每个点做卷积乘,则kernel大小为50x4x4,共500个feature map输出,500个kernel

    4. F2 : 500x1x1x10 = 5000,500维度特征图输入,全连接,kernel大小为500x1x1,共10个feature map输出,10个kernel

    用4bytes的float类型来存储参数,则总的参数量大小为:

    500 + 25000 + 400000 + 5000 + (20 + 50 + 500 + 10) =  431080
    

    字节数为:

    431080 x 4 = 1724320 ≈ 1683.90625kb ≈ 1.64M 
    对比实际LeNet-5网络基于caffe训练出来的模型大小为:1.64 MB (1,725,025 字节),基本接近,因为模型中可能还带有附加特性参数。

    从上我们看出,在我们确定了网络的基本结构时模型大小就已经确定了。

    我们在对一个网络进行训练时,常常使用一些预训练模型,这些预训练模型往往决定了我们最后模型的大小!

  • 相关阅读:
    一文带你了解接口测试价值与体系
    干货|app自动化测试之设备交互API详解
    干货|app自动化测试之Appium问题分析及定位
    干货| app自动化测试之Andriod微信小程序的自动化测试
    如果你也有这些职场困惑,周六一直线上答疑
    文末福利 | 团队管理第一步之高效招聘
    精准化测试原理简介与实践探索
    文末有福利 | 面试时如何命中面试官的考题?
    Visual studio prebuild/postbuild 设置条件不生效
    使用腾讯地图api获取定位信息经纬度(需要浏览器支持,且需要https)
  • 原文地址:https://www.cnblogs.com/shuimuqingyang/p/13984071.html
Copyright © 2011-2022 走看看