• 卷积神经网络的计算


    转自:https://zhuanlan.zhihu.com/p/63174774

    1. 卷积

    卷积神经网络中的卷积是指定义好卷积核(kernel),并对图像(或者特征图,feature map)进行滑动匹配,即对应位置相乘再相加。其特点就在于能够捕捉局部的空间特征。具体过程如下图所示:

    图1-二维卷积过程示例

    每一个卷积核对应于一种特征提取的范式,不同的卷积核对应于不同的特征提取器,如下图所示:

    图2-卷积特征提取示例


    卷积操作的参数包括卷积核大小(kernel size)、步长(stride)以及边缘填充(padding)三个参数。此外对于同一步的卷积操作,可以使用多个卷积核,就能得到多张特征图。

    • 卷积核大小 [公式] :即卷积核的尺寸,通常都是正方形。上图中的大小就是3*3;
    • 步长 [公式] :卷积过程中每次滑动的距离。如上图中就是步长为1,步长成倍的增加,卷积后的特征大小就会成倍的减小。
    • 边缘填充 [公式] :为了在调整卷积后特征的大小,会在边缘填充来补齐,通常填充值为0,且上下左右对称;

    卷积后的特征图大小可由下面公式进行计算,这里卷积后尺寸大小为 [公式] , [公式] 表示输入特征图大小:

    [公式]

    为了方便理解,这里举个栗子。对于输入维度为(255,255,3)的RGB图像,采用卷积核大小3 * 3 * 3进行卷积,步长为2,边缘填充为1,卷积核的个数为16。那么得到的相应的输出特征图大小为(255-3+4)/2+1 = 129,即129 * 129大小,一共16个。所以最终输出的张量大小为129*129*16。

    图4-不同步长核边缘填充对应的卷积结果


    卷积按照特征图的卷积维度不同可以分成一维卷积、二维卷积和三维卷积。

    • 一维卷积(1d conv):卷积核在一维空间进行滑动计算,通常用于对文本、股票价格等序列的处理,如图5所示。
    • 二维卷积(2d conv):卷积核在二维空间进行滑动计算,用于对图像的特征提取;
    • 三维卷积(3d conv):卷积核在三维空间进行滑动计算,用于视频数据的处理;

    图5-一维卷积示例图,卷积核为[1,0,-1]

    下面给出不同维度卷积所对应的输入输出以及卷积核大小的对应情况。out_channels也就对应于卷积核的个数。

    图6-卷积类型和输入大小的对应关系图7-卷积类型和卷积核大小的对应关系图8-卷积类型和输出大小的对应关系

    下面将给大家介绍卷积的一些相关计算,默认都是2d卷积。

    3. 卷积参数量的计算

    对于一层卷积而言,其中的每个卷积核的参数量即为同卷积核的大小,那么对于有 [公式] 个卷积核的卷积层而言,并加上了偏置项。其参数量 [公式] 为:

    [公式]

    4. 卷积Flops的计算

    衡量卷积计算量的指标是FLOPs(Floating Point Operations,浮点运算次数)。一次乘法和一次加法表示一个浮点运算次数。那么每一个卷积每一次的滑动卷积的计算量就是 [公式],那么在 [公式] 的图上进行卷积就可以计算得到如下计算公式,也就是参数量乘以卷积图的尺寸:

    [公式]

    5. 感受野的计算

    感受野(eceptive Field)是指卷积的输出结果对应于到输入中的区域大小。是设计多层卷积神经网络的一个重要依据。随着卷积层数的增加,对应到原始输入的感受野也会逐渐增大。层数 [公式] 对应到输入的感受野 [公式] 的计算公式如下:

    [公式]

  • 相关阅读:
    SQL server 插入不同IP的数据库
    SQL Server中的循环例子(网摘)
    C#小型数据库只能查询
    vue.prototype和vue.use的区别和注意点
    Ajax+PHP简单入门教程
    smarty在windows下的安装
    docker安装mysql镜像和容器
    Linux导出未越狱Iphone10.3QQ聊天记录
    记一次Struts中文乱码
    Ubuntu设置服务开机启动
  • 原文地址:https://www.cnblogs.com/lyp1010/p/11752901.html
Copyright © 2020-2023  润新知