详解卷积步长

卷积中的步幅是另一个构建卷积神经网络的基本操作,让向展示一个例子。

如果想用3×3的过滤器卷积这个7×7的图像,和之前不同的是,把步幅设置成了2。还和之前一样取左上方的3×3区域的元素的乘积,再加起来,最后结果为91。

只是之前移动蓝框的步长是1,现在移动的步长是2,让过滤器跳过2个步长,注意一下左上角,这个点移动到其后两格的点,跳过了一个位置。然后还是将每个元素相乘并求和,将会得到的结果是100。

现在继续,将蓝色框移动两个步长,将会得到83的结果。当移动到下一行的时候,也是使用步长2而不是步长1,所以将蓝色框移动到这里:

注意到跳过了一个位置,得到69的结果,现在继续移动两个步长,会得到91,127,最后一行分别是44,72,74。

所以在这个例子中,用3×3的矩阵卷积一个7×7的矩阵,得到一个3×3的输出。输入和输出的维度是由下面的公式决定的。如果用一个\(f×f\)的过滤器卷积一个\(n×n\)的图像,padding为\(p\),步幅为\(s\),在这个例子中\(s=2\),会得到一个输出,因为现在不是一次移动一个步子,而是一次移动\(s\)个步子,输出于是变为\(\frac{n+2p - f}{s} + 1 \times \frac{n+2p - f}{s} + 1\)

在这个例子里,\(n=7\),\(p=0\),\(f=3\),\(s=2\),\(\ \frac{7 + 0 - 3}{2} + 1 =3\),即3×3的输出。

现在只剩下最后的一个细节了,如果商不是一个整数怎么办?在这种情况下,向下取整。\(⌊ ⌋\)这是向下取整的符号,这也叫做对\(z\)进行地板除(floor),这意味着\(z\)向下取整到最近的整数。这个原则实现的方式是,只在蓝框完全包括在图像或填充完的图像内部时,才对它进行运算。如果有任意一个蓝框移动到了外面,那就不要进行相乘操作,这是一个惯例。3×3的过滤器必须完全处于图像中或者填充之后的图像区域内才输出相应结果,这就是惯例。因此正确计算输出维度的方法是向下取整,以免\(\frac{n + 2p - f}{s}\)不是整数。

总结一下维度情况,如果有一个\(n×n\)的矩阵或者\(n×n\)的图像,与一个\(f×f\)的矩阵卷积,或者说\(f×f\)的过滤器。Padding是\(p\),步幅为\(s\)没输出尺寸就是这样:

可以选择所有的数使结果是整数是挺不错的,尽管一些时候,不必这样做,只要向下取整也就可以了。也可以自己选择一些\(n\),\(f\),\(p\)和\(s\)的值来验证这个输出尺寸的公式是对的。

这里有一个关于互相关和卷积的技术性建议,这不会影响到构建卷积神经网络的方式,但取决于读的是数学教材还是信号处理教材,在不同的教材里符号可能不一致。如果看的是一本典型的数学教科书,那么卷积的定义是做元素乘积求和,实际上还有一个步骤是首先要做的,也就是在把这个6×6的矩阵和3×3的过滤器卷积之前,首先将3×3的过滤器沿水平和垂直轴翻转,所以\(\begin{bmatrix}3 & 4 & 5 \\ 1 & 0 & 2 \\ - 1 & 9 & 7 \\ \end{bmatrix}\)变为\(\begin{bmatrix} 7& 2 & 5 \\ 9 & 0 & 4 \\ - 1 & 1 & 3 \\\end{bmatrix}\),这相当于将3×3的过滤器做了个镜像,在水平和垂直轴上(整理者注:此处应该是先顺时针旋转90得到\(\begin{bmatrix}-1 & 1 & 3 \\ 9 & 0 & 4 \\ 7 & 2 & 5 \\\end{bmatrix}\),再水平翻转得到\(\begin{bmatrix} 7& 2 & 5 \\ 9 & 0 & 4 \\ - 1& 1 & 3 \\\end{bmatrix}\))。然后再把这个翻转后的矩阵复制到这里(左边的图像矩阵),要把这个翻转矩阵的元素相乘来计算输出的4×4矩阵左上角的元素,如图所示。然后取这9个数字,把它们平移一个位置,再平移一格,以此类推。

所以在这中定义卷积运算时,跳过了这个镜像操作。从技术上讲,实际上做的,在前面使用的操作,有时被称为互相关(cross-correlation)而不是卷积(convolution)。但在深度学习文献中,按照惯例,将这(不进行翻转操作)叫做卷积操作。

总结来说,按照机器学习的惯例,通常不进行翻转操作。从技术上说,这个操作可能叫做互相关更好。但在大部分的深度学习文献中都把它叫做卷积运算,因此将在这使用这个约定。如果读了很多机器学习文献的话,会发现许多人都把它叫做卷积运算,不需要用到这些翻转。

事实证明在信号处理中或某些数学分支中,在卷积的定义包含翻转,使得卷积运算符拥有这个性质,即\((A*B)*C=A*(B*C)\),这在数学中被称为结合律。这对于一些信号处理应用来说很好,但对于深度神经网络来说它真的不重要,因此省略了这个双重镜像操作,就简化了代码,并使神经网络也能正常工作。

根据惯例,大多数人都叫它卷积,尽管数学家们更喜欢称之为互相关,但这不会影响到在编程练习中要实现的任何东西,也不会影响阅读和理解深度学习文献。

神经网络之卷积篇:详解卷积步长(Strided convolutions)的更多相关文章

  1. 详解卷积神经网络(CNN)

    详解卷积神经网络(CNN) 详解卷积神经网络CNN 概揽 Layers used to build ConvNets 卷积层Convolutional layer 池化层Pooling Layer 全 ...

  2. 【33】卷积步长讲解(Strided convolutions)

    卷积步长(Strided convolutions) 卷积中的步幅是另一个构建卷积神经网络的基本操作,让我向你展示一个例子. 如果你想用3×3的过滤器卷积这个7×7的图像,和之前不同的是,我们把步幅设 ...

  3. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  4. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  5. 基于双向BiLstm神经网络的中文分词详解及源码

    基于双向BiLstm神经网络的中文分词详解及源码 基于双向BiLstm神经网络的中文分词详解及源码 1 标注序列 2 训练网络 3 Viterbi算法求解最优路径 4 keras代码讲解 最后 源代码 ...

  6. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  7. 【python实现卷积神经网络】卷积层Conv2D反向传播过程

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...

  8. 第十五节,卷积神经网络之AlexNet网络详解(五)

    原文 ImageNet Classification with Deep ConvolutionalNeural Networks 下载地址:http://papers.nips.cc/paper/4 ...

  9. 详解卷积神经网络(CNN)在语音识别中的应用

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:侯艺馨 前言 总结目前语音识别的发展现状,dnn.rnn/lstm和cnn算是语音识别中几个比较主流的方向.2012年,微软邓力和俞栋老 ...

  10. 神经网络:卷积神经网络CNN

    一.前言 这篇卷积神经网络是前面介绍的多层神经网络的进一步深入,它将深度学习的思想引入到了神经网络当中,通过卷积运算来由浅入深的提取图像的不同层次的特征,而利用神经网络的训练过程让整个网络自动调节卷积 ...

随机推荐

  1. 使用 TensorRT C++ API 调用GPU加速部署 YOLOv10 实现 500FPS 推理速度——快到飞起!!

    ​ NVIDIA TensorRT 是一款用于高性能深度学习推理的 SDK,包含深度学习推理优化器和运行时,可为推理应用程序提供低延迟和高吞吐量.YOLOv10是清华大学研究人员近期提出的一种实时目标 ...

  2. 详解Web应用安全系列(4)失效的访问控制

    在Web安全中,失效的访问控制(也称为权限控制失效或越权访问)是指用户在不具备相应权限的情况下访问了受限制的资源或执行了不允许的操作.这通常是由于Web应用系统未能建立合理的权限控制机制,或者权限控制 ...

  3. Spring MVC 中使用 RESTFul 编程风格

    1. Spring MVC 中使用 RESTFul 编程风格 @ 目录 1. Spring MVC 中使用 RESTFul 编程风格 2. RESTFul 编程风格 2.1 RESTFul 是什么 2 ...

  4. MySQL执行过程及执行顺序

    一.MySQL执行过程 简单概括: 1.我们在客户端发起一个SQL的查询: 2.连接器判断用户登录以及用户权限: 3.缓存命中,走缓存,直接返回查询结果: 3.缓存没命中,到达分析器,对SQL语句进行 ...

  5. Http基础协议

    浏览器请求方法 http1.0定义了三种: GET: 向服务器获取资源,比如常见的查询请求 POST: 向服务器提交数据而发送的请求 Head: 和get类似,返回的响应中没有具体的内容,用于获取报头 ...

  6. Mac部署Tomcat8.5

    官网下载 点我直达 启动 将Tomcat包解压后并放到这个目录下:/Users/chenyanbin/plus/tomcat8.5/bin 切换目录: cd /Users/chenyanbin/plu ...

  7. C# 判断字符串是否为整数

    /// <summary> /// 判断一个字符串是否是正整数 /// </summary> /// <param name="s"></ ...

  8. SQLServer 的Distinct

    distinct去除重复的数据(distinct是对整个结果集进行数据重复处理,不是针对某一列) -> 检查返回不重复的数据(对于整条记录不重复才会去除,如ID不一样) 用法:select di ...

  9. 编程好帮手:通义灵码(TONGYI Lingma),是阿里云出品的一款基于通义大模型的智能编码辅助工具

    通义灵码(TONGYI Lingma),是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写.自然语言生成代码.单元测试生成.代码注释生成.代码解释.研发智能问答.异常报错排查 ...

  10. Vue禁止用户复制文案 + 兼容 IE

    vue必须要加载完才可以操作dom,或者在mounted和created时使用this.$nextTick方法,使dom生成后进行相关操作. created() { this.$nextTick(() ...