DeepLearning.ai学习笔记(四)卷积神经网络 -- week1 卷积神经网络基础知识介绍

一、计算机视觉


如图示,之前课程中介绍的都是64* 64 3的图像,而一旦图像质量增加,例如变成1000 1000 * 3的时候那么此时的神经网络的计算量会巨大,显然这不现实。所以需要引入其他的方法来解决这个问题。

二、边缘检测示例


边缘检测可以是垂直边缘检测,也可以是水平边缘检测,如上图所示。

至于算法如何实现,下面举一个比较直观的例子:


可以很明显的看出原来6 * 6的矩阵有明显的垂直边缘,通过3 * 3的过滤器(也叫做 “核”)卷积之后,仍然保留了原来的垂直边缘特征,虽然这个边缘貌似有点大,这是因为数据不够大的原因,如果输入数据很大的话这个不是很明显了。

三、更多边缘检测内容


除了上面的垂直,水平边缘检测,其实也可以检测初颜色过度变化,例如是亮变暗,还是暗变亮?

下面是一些常见的过滤器,第二个是Sobel filter,具有较强的鲁棒性,第三个是Schoss filter

其实过滤器的9个参数也可以通过学习的方式获得,虽然比较费劲,但是可能会学到很多其他除了垂直,水平的边缘特征,例如45°,70°等各种特征。

四、Padding

1.为什么要用padding

之所以运用Padding(填充)主要是为了解决如下两个缺点:

1.由前面的例子可以看到,每经过一次卷积计算,原数据都会减小,但有的时候我们并不希望这样。举个比较极端的例子:假设原数据是30 * 30的一只猫的图像,经过10次卷积(过滤器是3 * 3)后,最后图像只剩下了10 * 10了,此时不就剩下马赛克了吗23333

2.由卷积的计算方法可以知道,图像边缘特征计算次数显然少于图像中间位置的像素点,如下图示(绿色的位置明显是冷宫)

所以为了解决上=上面两个问题,引入了padding,一般是padding=1,填充的数据是0。效果如下:

原来的6 * 6填充后变成了8 * 8,此时在经过一次卷积得到的仍旧是6 * 6的矩阵。

下面总结一下卷积之后得到矩阵大小的计算方法,假设:

  • 原数据是 n * n
  • 过滤器是 f * f
  • padding p * p

得到的矩阵大小是 (n+2p-f+1)*(n+2p-f+1)

对于第二个缺点,虽然边缘像素点仍旧计算的比较少,但是这个缺点至少一定程度上被削弱了。

2.如何padding的大小

两种选择:Valid 卷积Same 卷积

  • valid 卷积

即不添加padding。

  • Same 卷积

即保持原图像矩阵的大小。满足 (n+2p-f+1) = n ,即 \(p=\frac{f-1}{2}\)
为了满足上式,f一般奇数。

五、卷积步长

过滤器纵向,横向都需要按步长S来移动,如图示

结合之前的内容,输出矩阵大小计算公式方法为,假设:

  • 原数据是 : n * n
  • 过滤器是 : f * f
  • padding : p * p
  • 步长Stride: s * s

得到的矩阵大小是 ?\(\frac{n+2p-f}{s}\)+1?*?\(\frac{n+2p-f}{s}\)+1?

??: 向下取整符号 ?59/60?=0

??:向上取整符号 ?59/60?=1

六、卷积中“卷”的体现之处

这一节用立体卷积来解释。


如图示,输入矩阵是 6 * 6 * 3(height * width * channels),过滤器是3 * 3 * 3,计算方法是一一对应相乘相加,最后得到4 * 4的二维矩阵。

有时可能需要检测横向边缘和纵向边缘,或者其他特征,所以我们可以使用多个过滤器。
上图则使用了两个过滤器,得到的特征矩阵大小为 4 * 4 * 2.

七、单层卷积网络


如图示得到4 * 4的矩阵后还需要加上一个变差\(b_n\),之后还要进行非线性转换,即用ReLU函数。因此假如在某一卷积层中使用了10个3 * 3的过滤器,那么一共有\((3*3+1)*10=280\)个参数。

下面总结了各项参数的大小和表示方法:

  • 过滤器大小:\(f^{[l]}\)
  • 填充 padding:\(p^{[l]}\)
  • 步长 stride:\(s^{l}\)
  • 激活函数: \(a^{l}:n_H^{l} * n_W^{l} * n_c^{l}\)
  • 权重Weight: \(f^{l}*f^{l}*n_c^{[l-1]}*n_c^{[l]}\)
  • 偏差bias:\(1*1*1*n_c^{[l]}\)
  • 输入矩阵(height* width* channels): \(n_H^{l-1} * n_W^{l-1} * n_c^{l-1}\)
    • 每一卷积层的过滤器的通道的大小 = 输入层的通道大小
  • 输出矩阵(height* width* channels): \(n_H^{l} * n_W^{l} * n_c^{l}\)
    • 输出层的通道的大小 = 过滤器的个数

输出层与输入层计算公式:

\(n_{H/W}^{[l]}=[\frac{n_{H/W}^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1]\)

八、简单卷积网络示例


上图简单介绍了卷积网络的计算过程,需要再介绍的一点是最后一层的全连接层,即将7 * 7 * 40的输出矩阵展开,得到1960个节点,然后再采用逻辑回归或Softmax来进行预测。

另外从上面的例子还可以看到,在一般的卷积神经网络中,每一层的矩阵的height和width是逐渐减小的,而channel则是增加的。

卷积神经网络中常见的三中类型的layer:

  • Convolution (Conv 卷积层)
  • Pooling (Pool 池化层)
  • Fully connected (FC 全连接层)

九、池化层

Pooling layer(池化层)的作用是压缩数据,加速运算,同时提高所提取特征的鲁棒性。

  • Max Pooling
    即选取最大的

  • Average Pooling
    即计算平均值,但是这个用的不多,因为这个会加入更多的计算量

注意:一般来说池化层是不需要Padding的,所以p都会置为0

十、卷积神经网络示例

注意:在吴大大的视频中将 Conv layerPooling layer合并在一起视为一层,因为池化层没有参数(因为池化层的过滤器的无参数,而且其大小可以事先确定好)。 但是在其他文献中可能会把池化层算成单独的层,所以具体视情况而定。

十一、为什么使用卷积?

卷积相比于全连接的好处最直观的就是使用的参数更少:

如图示,加入我们有一个32 * 32 * 3的图片,经过6个5 * 5的过滤器后可以得到28 * 28 * 6的矩阵,此时我们只需要 \(5*5*6=150\)个参数就可以了。而如果不用卷积呢?

首先32 * 32 3 = 3072,假如输出矩阵也要是28 28 * 6,即4704个节点,如果全连接的话那么就需要4704 * 3072个权
重参数,所以这个对比还是很明显的了。

至于为什么可以保证参数少的同时也保证了有效性,是因为如下两个原因

  • 参数共享(Parameter sharing)
  • 稀疏连接(Sparsity of connections)

参数共享:例如我们希望获取图像的竖向特征,那么我们只需加入一个可以检测竖向特征的过滤器就够了。
稀疏连接:如上图所示,输出矩阵左上角的0只与输入矩阵左上角的9个元素有关,其他的值不会干扰。输出矩阵其他位置也一样。所以这就是为什么卷积网络也可以捕捉到图像平移的特征,例如将图片中的猫向左平移几个像素点后,依然能够识别正确。

MARSGGBO?原创


2018-01-01


原文地址:https://www.cnblogs.com/marsggbo/p/8166487.html

时间: 2024-11-04 13:52:50

DeepLearning.ai学习笔记(四)卷积神经网络 -- week1 卷积神经网络基础知识介绍的相关文章

]DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法

1. Mini batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理: 如图所示,我们以1000为单位,将数据进行划分,令$x^{\{1\}}=\{x^{(1)},x^{(2)}……x http://pic.cnhubei.com/space.php?uid=1132&do=album&id=825921http://pic.cnhubei.com/space.php?uid

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

一.目标定位 这一小节视频主要介绍了我们在实现目标定位时标签该如何定义. 上图左下角给出了损失函数的计算公式(这里使用的是平方差) 如图示,加入我们需要定位出图像中是否有pedestrian,car,motorcycles.注意在这里我们假设图像中只肯呢个存在这三者中的一种或者都不存在,所以共有四种可能. \(P_c=1\)表示有三者中的一种 \(C_1=1\)表示有pedestrian,反之没有 \(C_2=1\)表示有car \(C_3=1\)表示有motorcycles \(b_*\)用于

USB2.0学习笔记连载(二):USB基础知识简介

  USB接口分为USB A型.USB B型.USBmini型.USBmicro型.USB3.0其中每种都有相应的插座和插头. 图1 图2 上图是USBA型接口,图1为插座,图2为插头.插座指向下行方向,插头指向上行方向. USB中一般常用有4根线,两边两根线一般为VBUS(5V的接入或接出线,对应上图中的1引脚)和GND(对应上图中的4引脚).中间两根为D+(对应上图中的3引脚),D-(对应上图中的2引脚),还有外加一个屏蔽层. 图3 图4 USB B型所对应的各信号和USB A型一致.在各种

【Linux学习笔记】第8章 Linux shell基础知识

8.1shell介绍shell是一个命令解释器,提供人机交互.支持特定语法.每个用户都可以有自己特定的shell(bash).CentOS7默认bash(Bourne Agin Shell).其他还有zsh.ksh等. 8.2命令历史命令历史存放于~/.bash_history文件下.history 查看之前用过的命令,默认保存最近1000条,由变量HISTSIZE设定条数,HISTSIZE可以到配置文件/etc/profile中去配置,配置后需要source才会生效.history -c 清空

DeepLearning (六) 学习笔记整理:神经网络以及卷积神经网络

神经网络 神经网络模型 前向传播 反向传播 Neural Networds Tips and Tricks Gradient Check Regularization 激活函数 sigmoid 函数 Tanh Relu 稀疏编码 卷积神经网络 卷积 局部感知 权值共享 多通道卷积 卷积输出大小计算公式 池化pooling后的平移不变性 Dropout Learning rate AdaGrad python 实现 caffe 中的学习率 参考文献 [原创]Liu_LongPo 转载请注明出处[C

吴恩达 DeepLearning.ai课程笔记(1-3)神经网络和深度学习 --- 浅层神经网络

以下为在Coursera上吴恩达老师的DeepLearning.ai课程项目中,第一部分<神经网络和深度学习>第二周课程部分关键点的笔记.笔记并不包含全部小视频课程的记录,如需学习笔记中舍弃的内容请至 Coursera 或者 网易云课堂.同时在阅读以下笔记之前,强烈建议先学习吴恩达老师的视频课程. 1. 二分类问题 对于二分类问题,大牛给出了一个小的Notation. 样本:  ,训练样本包含  个: 其中  ,表示样本 包含 个特征:  ,目标值属于0.1分类: 训练数据:  输入神经网络时

Deep Q-Network 学习笔记(二)—— Q-Learning与神经网络结合使用(有代码实现)

参考资料: https://morvanzhou.github.io/ 非常感谢莫烦老师的教程 http://mnemstudio.org/path-finding-q-learning-tutorial.htm http://www.cnblogs.com/dragonir/p/6224313.html 这篇文章也是用非常简单的说明将 Q-Learning 的过程给讲解清楚了 http://www.cnblogs.com/jinxulin/tag/%E5%A2%9E%E5%BC%BA%E5%A

Caliburn.Micro学习笔记(四)----IHandle&lt;T&gt;实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop