1 边缘检测( edage detection )

下图是垂直边缘检测的例子,实际上就是用一个卷积核进行卷积的过程。

这个例子告诉我们,卷积可以完成垂直方向的边缘检测。同理卷积也可以完成水平方向的边缘检测,还可以完成各种不同角度的边缘检测。

计算机视觉的研究者会用几种不同的卷积核来做边缘检测。

但是在深度学习时代,我们不需要使用那些卷积核,我们把卷积核的数字设置成参数,通过训练来学习到不同的卷积核, 以此对图像进行处理,抽取相应的特征。

2 padding和步长( padding, stride )

如果采用上述的方法进行卷积,那么图像会缩小,而且原图的边缘信息在卷积中的参与度比较少,我们可以使用padding来解决这个问题,即在外围填充像素,比如填充0。

padding的参数p,表示在外围填充了几层。填充了p层,则原图像的高和宽都会增加2*p,因为会在两边填充所以是2*p。

一个n*n的图像,padding为p,在f*f的卷积核的卷积下,卷积后的图像为 ( n + 2p - f + 1) * ( n + 2p - f + 1 )。

valid convolution:没有padding的卷积。

same convolutioin:设定了padding使得卷积后图像大小不变的卷积,即 n = n+2p-f+1,那么p = ( f - 1 ) / 2,所以为了保证p为整数,一般f都为奇数。

stride决定了卷积核每次移动的步长,假定步长参数为s,每次移动s步。

一个n*n的图像,f*f的卷积核,padding为p,stride为s,卷积后的图像size为 ( n + 2p - f ) / s + 1,为了防止小数,应该向下取整$\left \lfloor ( n + 2p - f ) / s + 1 \right \rfloor$,表示卷积核在某个方向上无法继续移动。

3 三维卷积( Convolutions over volumes )

考虑到图像的3通道,这个时候的卷积核也应该是3通道的,卷积运算的时候把3个通道的结果加起来作为结果,剩下的就和之前的卷积没什么差别。

再考虑多个卷积核的情况,用#filter表示卷积核个数,则卷积后的图像可以看成#filter层的图像,每一层是单个卷积核卷积后的结果,单个卷积核的通道是3。

用nc表示通道数,用nc' 表示卷积核的数目,那么原始图片是n * n * nc,卷积核是f * f * nc,则卷积后的图片为 (n - f + 1) * ( n - f + 1) * nc'。这里默认p为0,s为1,如果不是则参考之前的计算公式$\left \lfloor ( n + 2p - f ) / s + 1 \right \rfloor$。

4 卷积网络( convolutional network )

在神经网络中,在对原图像卷积后我们还要做一些运算,卷积可以看成wx的运算,我们还要加上偏置b,以及激活的运算。

先考虑单层卷积网络,如下图所示,输入图像为6*6*3的矩阵。

用第1个卷积核对输入矩阵卷积,用卷积得到的矩阵加上一个偏置b1(python会将它广播成shape为4*4的矩阵),用relu激活,得到一个4*4的矩阵。

用第2个卷积核对输入矩阵卷积,用卷积得到的矩阵加上一个偏置b2,用relu激活,得到另一个4*4的矩阵。

把这个两个矩阵堆叠起来,形成4*4*2的矩阵,作为单元的输出。

卷积核的大小3*3*3,加上1个偏置,等于28,然后乘以卷积核的个数2,就是56,这就是该卷积层的参数个数。

不管你的图有多大,需要的参数个数都是一样的,这是卷积神经网络的一个特点,可以防止过拟合。

做下符号约定,$f^{[l]}$表示l层的卷积核大小(边长),$p^{[l]}$表示l层的padding,$s^{[l]}$表示l层的stride,$nc^{[l]}$表示l层的卷积核个数。

5 池化层( Pooling layers )

最大池化就是把矩阵分成几块,比如4*4就分成4个2*2的块,每个块取最大的值作为该块的值,形成一个2*2的矩阵。

这里参数f为2,表示2*2,参数s为2,表示移动2格。有点类似卷积的操作,只是用最大化代替了卷积运算。

可以把4*4看成某些特征的集合,数字大意味着可能提取了某个特定特征,比如左上象限存在的这个特征9,可能是一个猫的眼睛,而右上象限就没有这个特征。

最大化的实际作用就是,只要在任何一个象限提取到了某个特征,它就会被保留在最大池化的输出里。

如果在过滤器中提取到某个特征,那么保留了一个较大的数字,如果没有提取到这个特征,可能在右上象限不存在这个特征,那么其中的最大值也还是很小。

池化从二维推到三维就只是简单地叠加一层层的矩阵,每层还是按二维的池化那样做,没什么变化,输入是几通道,输出就是几通道。

平均池化和最大池化类似,就是最大化操作变成了取平均操作,目前来说,最大池化比平均池化更常用。

你可以根据自己意愿添加padding参数,只不过,最大池化中很少用padding。

6 卷积神经网络的示例( Convolutional neural network example )

一个典型的卷积神经网络就是(卷积1,池化1,卷积2,池化2,..,压平,全连接)。

可以直接把卷积和池化看成一类卷积操作,那整个过程其实就是进行多次的卷积,压平,然后接1层或几层全连接,最后接输出层。

这是典型的卷积神经网络结构,里面有很多超参数,常规做法是,尽量不要自己设置超参数,而是查看文献,选一个在别人任务中效果很好的架构。

如下图所示,可以看到图像的大小会越来越小,但是通道会越来越大。

7 为什么要卷积( Why convolutions)

卷积有两个重要的性质,一个是权值共享,一个是稀疏连接。正是因为这两个性质,卷积减少了很多参数,防止了过拟合。

权值共享很好理解,对于图像的每一部分都使用卷积核,卷积核就是共享的权值。卷积核在图像的一部分发挥了作用,那么在其它部分也能发挥作用。

稀疏连接就是每一层的输出只依赖于部分的输入,就是卷积的时候,一个输出是由图像的一部分卷积而来的。相比于全连接层,它减少了很多连接。

ng-深度学习-课程笔记-11: 卷积神经网络(Week1)的更多相关文章

  1. 深度学习课程笔记(一)CNN 卷积神经网络

    深度学习课程笔记(一)CNN 解析篇 相关资料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html 首先提到 Why CNN for I ...

  2. 深度学习课程笔记(十八)Deep Reinforcement Learning - Part 1 (17/11/27) Lectured by Yun-Nung Chen @ NTU CSIE

    深度学习课程笔记(十八)Deep Reinforcement Learning - Part 1 (17/11/27) Lectured by Yun-Nung Chen @ NTU CSIE 201 ...

  3. 深度学习课程笔记(十二) Matrix Capsule

    深度学习课程笔记(十二) Matrix Capsule with EM Routing  2018-02-02  21:21:09  Paper: https://openreview.net/pdf ...

  4. 深度学习课程笔记(十一)初探 Capsule Network

    深度学习课程笔记(十一)初探 Capsule Network  2018-02-01  15:58:52 一.先列出几个不错的 reference: 1. https://medium.com/ai% ...

  5. 深度学习课程笔记(五)Ensemble

    深度学习课程笔记(五)Ensemble  2017.10.06 材料来自: 首先提到的是 Bagging 的方法: 我们可以利用这里的 Bagging 的方法,结合多个强分类器,来提升总的结果.例如: ...

  6. 深度学习课程笔记(四)Gradient Descent 梯度下降算法

    深度学习课程笔记(四)Gradient Descent 梯度下降算法 2017.10.06 材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS1 ...

  7. 深度学习课程笔记(三)Backpropagation 反向传播算法

    深度学习课程笔记(三)Backpropagation 反向传播算法 2017.10.06  材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS1 ...

  8. TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN

    前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...

  9. 深度学习课程笔记(十七)Meta-learning (Model Agnostic Meta Learning)

    深度学习课程笔记(十七)Meta-learning (Model Agnostic Meta Learning) 2018-08-09 12:21:33 The video tutorial can ...

随机推荐

  1. Zookeeper异常org.apache.zookeeper.KeeperException$ConnectionLossException

    在虚拟机上安装了CenOS Linux系统,然后配置好了 zookeeper的集群环境,在本地写了一个Zookeeper测试程序,如下: package com.xbq.zookeeper; impo ...

  2. oracle常用管理命令

    启动数据库和监听 lsnrctl start sqlplus /nolog conn sys/as sysdba startup  查看当前的实例名 show parameter instance_n ...

  3. SecureCRT 详细使用图文教程(按步骤)

    一.安装和激活 安装 1.在http://www./softs/55471.html下载相关包激活工具,运行scrt622-x86.exe. 2.进入安装向导程序,默认下一步,直到安装完成既可以. 破 ...

  4. Date Json格式转换Date格式

    CreateTime=\/Date(1458722493663+0800)\/ var CreateTime="/Date(1458722493663+0800)/";var st ...

  5. 什么是SQL注入式攻击和如何防范?

    什么是SQL注入式攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响 ...

  6. Java三方---->Thumbnailator框架的使用

    Thumbnailator是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图.有了它我们就不用在费心思使用Image I/O API,J ...

  7. html表格中的tr td th用法

      表格是html中经常使用到的,简单的使用可能很多人都没问题,但是更深入的了解的人恐怕不多,下面我们先来看一下如何使用. <table>是<tr>的上层标签 <tr&g ...

  8. 【BZOJ1096】[ZJOI2007]仓库建设 斜率优化

    [BZOJ1096][ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司 ...

  9. SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]

    Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-co ...

  10. Laravel 5.7 No 'Access-Control-Allow-Origin' header is present on the request resource

    前后端项目跨域访问时会遇到此问题,解决方法如下: 创建一个中间件 php artisan make:middleware EnableCrossRequestMiddleware 该中间件的文件路径为 ...