1. 传统的边缘检测(比如Sobel)手工设计了3*3的filter(或者叫kernel)的9个权重,在深度学习中,这9个权重都是学习出来的参数,会比手工设计的filter更好,不但可以提取90度、0度的边缘,也可以提取出任意朝向的边缘(比如73度)。把这9个权重当成参数的思想已经成为计算机视觉中最为有效的思想之一。

2. Padding

  对于原始的卷积操作,原图分辨率为n*n,filter分辨率为f*f,则卷积后的结果是 (n-f+1)*(n-f+1)。有两个缺点:1)每次卷积操作都会把图像缩小;2)边缘像素的使用次数比中间像素少,这意味着丢掉了图像的很多边缘信息。为了解决这两个问题,可以在做卷积操作前,先填充(pad)原图。每边填充p个像素,则原图拓展成 (n+2p)*(n+2p) 的分辨率。

  p的选择分两种,1)Valid卷积:没有填充,p=0;2)Same卷积:输出和输入有相同的尺寸,p=(f+1)/2。计算机视觉里,f几乎永远是奇数。

3. Stride(步长)

  步长为s,则输出的分辨率为 ((n+2p-f)/s+1)*((n+2p-f)/s+1)。如果(n+2p-f)/s不为整数,则向下取整到最近的整数(floor),这个物理意义是只有filter在输入图像内部或者填充后的图像区域才计算卷积,如果filter移动到外面,则不计算。

4. Cross-correlation vs. convolution

  卷积的数学定义有flip的步骤,我们这边做的严格说叫corss-correlation(互相关)。但是在深度学习的文献中,按照惯例,我们还是称之为卷积,虽然我们并没有flip的操作。在数学、信号处理中,flip很重要是因为它有结合律的性质,(A*B)*C=A*(B*C)。但在图像处理里,这个性质不重要,所以省去了flip的操作。

5. 多通道图像的卷积

  对于n*n*nc的多通道图像,filter是f*f*nc,得到 (n-f+1)*(n-f+1) 的图像。通道数必须一致。

  每个filter对应一个特征(比如垂直方向边缘),如果要得到多个特征,则要使用多个filter,每个filter都是f*f*nc,然后把每个filter的结果堆叠起来,这时的结果是 (n-f+1)*(n-f+1)*nc' ,这里nc'是filter的数量,也就是下一层网络的输入图像的通道数。

  这里所谓的“通道(channel)”在一些文献里也被称为“深度(depth)”,NG觉得通道更好,因为深度会和神经网络的深度混淆。

6. 单层卷积网络

  对于第l层的卷机网络,f[l]是filter的大小(即第l层的filter大小为f*f),p[l]表示padding的像素数量,s[l]表示stride的大小,输入图像是nh[l-1]*nw[l-1]*nc[l-1],输出图像是nh[l]*nw[l]*nc[l],其中nh/w[l]=floor( (nh/w[l-1]+2p[l]-f[l])/s[l]+1 ),nc[l]是这一层的filter的数量,每个filter的大小是f[l]*f[l]*nc[l-1]。激活后的输出a[l]的大小是nh[l]*nw[l]*nc[l],如果有m个样本,向量化之后的激活输出A[l]的大小是m*nh[l]*nw[l]*nc[l]。权重的大小是f[l]*f[l]*nc[l-1]*nc[l]。bias的大小是nc[l],python里的size是 (1, 1, 1, nc[l])。图像的长宽和通道的排序并没有统一,这里NG是把通道放最后(即nh*nw*nc),有的代码是放最前面(即nc*nh*nw)。

  例子:如果有10个3*3*3的filter,这一层网络一共有(3*3*3+1)*10=280个参数。对于任意大小的图像,这层网络都只有280个参数,这有效控制住了参数的数量,防止过拟合。

7. 池化层

  和卷积操作一样,也是用filter对原图进行操作,超参数是filter的大小f和步长s。一般 f=2,s=2,效果相当于高度和宽度各缩减一半。也有 f=3,s=2的情况。没有需要学习的参数。目的:缩减模型的大小,提高计算速度,提高所提取特征的鲁棒性。

  Max pooling:直观解释:只要filter的区域内提取到某个特征,它都会被保留在输出里。

  Average pooling:filter内取平均。

  Max pooling是最常用的。对于特别深的网络,也许会用average pooling来处理很多通道的数据(比如7*7*1000,整个空间内求平均值得到1*1*1000)。也可以根据自己的意愿做padding,则多一个超参数p,但padding的操作非常非常少用。一般池化层filter的通道数为1,对输入的每个通道单独处理,所以输入有几个通道,输出也是几个通道。

8. 卷积神经网络

  前向传播中,随着层数越来越深,图像往往越来越小(开始阶段可能保持相同大小),通道数越来越多。

  卷积神经网络一般包含:卷积层(CONV)、池化层(POOL)、全连接层(FC)。池化层没有需要学习的参数,只有超参数。卷积层的参数相对少,大部分参数都在全连接层。

  一般一个或多个卷积层后会跟一个池化层,最后几个全连接层(最后一层也许是softmax)。有的书把卷积层、池化层合起来称做一层,有的书把卷积层、池化层分开来算。NG说我们在说深度学习网络有多少层时只考虑有权重的层,由于池化层没有,所以他就把卷积层、池化层合起来称做一层。

9. 卷积层的优点

  相比于全连接层,卷积层的两个主要优势:1)参数共享(parameter sharing),某种特征提取器(比如垂直方向的边缘检测)在图像的某一部分适用,那么在其他部分也适用。2)稀疏连接(sparsity of connections),输出的每个元素只与一部分输入有关,从而预防过拟合。

deeplearning.ai 卷积神经网络 Week 1 卷积神经网络的更多相关文章

  1. DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络

    介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...

  2. DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络

    一.深层神经网络 深层神经网络的符号与浅层的不同,记录如下: 用\(L\)表示层数,该神经网络\(L=4\) \(n^{[l]}\)表示第\(l\)层的神经元的数量,例如\(n^{[1]}=n^{[2 ...

  3. DeepLearning.ai学习笔记汇总

    第一章 神经网络与深度学习(Neural Network & Deeplearning) DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络 DeepLe ...

  4. Coursera深度学习(DeepLearning.ai)编程题&笔记

    因为是Jupyter Notebook的形式,所以不方便在博客中展示,具体可在我的github上查看. 第一章 Neural Network & DeepLearning week2 Logi ...

  5. DeepLearning.ai学习笔记(四)卷积神经网络 -- week3 目标检测

    一.目标定位 这一小节视频主要介绍了我们在实现目标定位时标签该如何定义. 上图左下角给出了损失函数的计算公式(这里使用的是平方差) 如图示,加入我们需要定位出图像中是否有pedestrian,car, ...

  6. deeplearning.ai 卷积神经网络 Week 2 深度卷积网络:实例研究 听课笔记

    1. Case study:学习经典网络的原因是它们可以被迁移到其他任务中. 1.1)几种经典的网络: a)LeNet-5(LeCun et al., 1998. Gradient-based lea ...

  7. deeplearning.ai 卷积神经网络 Week 2 卷积神经网络经典架构

    1. Case study:学习经典网络的原因是它们可以被迁移到其他任务中. 1.1)几种经典的网络: a)LeNet-5(LeCun et al., 1998. Gradient-based lea ...

  8. CNN(卷积神经网络)、RNN(循环神经网络)、DNN,LSTM

    http://cs231n.github.io/neural-networks-1 https://arxiv.org/pdf/1603.07285.pdf https://adeshpande3.g ...

  9. 卷积神经网络(CNN)之一维卷积、二维卷积、三维卷积详解

    作者:szx_spark 由于计算机视觉的大红大紫,二维卷积的用处范围最广.因此本文首先介绍二维卷积,之后再介绍一维卷积与三维卷积的具体流程,并描述其各自的具体应用. 1. 二维卷积 图中的输入的数据 ...

  10. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

    https://www.zhihu.com/question/34681168 CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别?修改 CNN(卷积神经网 ...

随机推荐

  1. P1618 三连击(升级版)

    题解: #include<stdio.h>int main(){ int A,B,C; scanf("%d %d %d",&A,&B,&C);  ...

  2. Scala(一)——scala+Idea环境配置

    Java虚拟机的确是很强大,有很多计算机语言可以运行在虚拟机上,完善了虚拟机上多语言编程. 近年来,大数据云计算,大数据的火爆也让一些小众语言火了起来,如Python,Scala等.这些语言编写简单, ...

  3. 201604-1 折点计数 Java

    思路: 这个题要小心考虑不全.左右两边都比这个数小 或者 左右两边都比这个数大 import java.util.Scanner; public class Main { public static ...

  4. ES6之展开运算符

    本文介绍ES6新增的展开运算符(spread operator). 由上图可得,展开运算符负责拼装数组和对象,与之相反,解构赋值负责分解数组和对象. 由上图可得,展开运算符能和解构赋值一起发挥成更大的 ...

  5. Python Numpy中数据的常用的保存与读取方法

    在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件 ...

  6. memset为int型数组初始化问题

    头文件:#include <string.h>memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为:    void * memset( void * ptr, int ...

  7. 吴裕雄--天生自然TensorFlow高层封装:Keras-CNN

    # 1. 数据预处理 import keras from keras import backend as K from keras.datasets import mnist from keras.m ...

  8. ZZJ_淘淘商城项目:day03(淘淘商城02 - 后台系统功能实现)

    1.   今日大纲 1.  学习Nginx的使用 2.  实现商品的管理 a)       新增商品 b)       查询商品列表 c)       编辑商品 d)       删除商品 e)    ...

  9. mysql创建视图和存储过程,变量

    创建视图 sql>create view 视图名 as select语句; 修改视图并添加别名 sql>create or replace view empvu10 (employee_n ...

  10. TPO1-2 The Origin of Theater

    Stories (myths) may then grow up around a ritual. Frequently the myths include representatives of th ...