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. 【IOS6.0 自学瞎折腾】(四)Xib可视化编程

    其实在Interface Builder中,要把xib中的控件与代码联系起来用鼠标拖拉连线是非常方便的一件事,有的教程写的非常复杂要先点这后点那的. 一:IBOutlet,IB说明是Interface ...

  2. 关于js的面向对象设计

    function Person( name, age ){ this.name = name; this.age = age; this.sleep = function(){ alert( this ...

  3. ubuntu 14.04版本更改文件夹背景色为草绿色

    ENV:ubuntu 14.04 在这个版本上使用dconf 工具无法改变文件夹的背景了,下面介绍其他的方法,不需要dconf工具. 第一步:在home目录下创建.themes文件夹 第二步将/usr ...

  4. JZOJ.5325【NOIP2017模拟8.21】九九归一

    Description

  5. Android技巧分享——Android开发超好用工具吐血推荐(转)

    内容中包含 base64string 图片造成字符过多,拒绝显示

  6. WCF学习 (三)深入认识WCF契约

    什么是契约? 从SOA概念上讲,契约属于服务公开接口的一部分.一个服务契约,定义了服务端公开的服务方法,使用传输协议,可访问地址,传输的消息格式等内容.换句话说:契约描述了该服务的功能和作用,它告诉S ...

  7. C++中堆和栈的完全解析

    C++中堆和栈的完全解析 内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并 ...

  8. pandas将字段中的字符类型转化为时间类型,并设置为索引

    假设目前已经引入了 pandas,同时也拥有 pandas 的 DataFrame 类型数据. import pandas as pd 数据集如下 df.head(3) date open close ...

  9. vue-cli 项目打包异常汇总

    1.打包路径错误 npm run build 之后,会发现项目目录下多了 通过 localhost 运行 index.html 会发现空白,仔细一看,是因为引用的资源位置问题 明显这个地方应该是 ./ ...

  10. python-social-auth with Django: ImportError: No module named 'social_django' 解决方法

    To use Django with python social auth, you need to install the Django app as well. You can specify t ...