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 layer和 Pooling 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个元素有关,其他的值不会干扰。输出矩阵其他位置也一样。所以这就是为什么卷积网络也可以捕捉到图像平移的特征,例如将图片中的猫向左平移几个像素点后,依然能够识别正确。
DeepLearning.ai学习笔记(四)卷积神经网络 -- week1 卷积神经网络基础知识介绍的更多相关文章
- DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法
1. Mini-batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理: 如图所示,我 ...
- DeepLearning.ai学习笔记汇总
第一章 神经网络与深度学习(Neural Network & Deeplearning) DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络 DeepLe ...
- DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)
一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week2深度卷积神经网络 实例探究
一.为什么要进行实例探究? 通过他人的实例可以更好的理解如何构建卷积神经网络,本周课程主要会介绍如下网络 LeNet-5 AlexNet VGG ResNet (有152层) Inception 二. ...
- Deep Learning.ai学习笔记_第一门课_神经网络和深度学习
目录 前言 第一周(深度学习引言) 第二周(神经网络的编程基础) 第三周(浅层神经网络) 第四周(深层神经网络) 前言 目标: 掌握神经网络的基本概念, 学习如何建立神经网络(包含一个深度神经网络), ...
- Java白皮书学习笔记+Head First Java--用于自我复习 基础知识篇
本笔记是摘与Hava白皮书上面的内容,用来给自己做提醒的,因此大概并不适合Java的学习者作为笔记参考使用. 以我的水平现在还看不懂这个... 一.基础知识篇 1.常量 final关键字指示常量,只能 ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week4 特殊应用:人力脸识别和神经风格转换
一.什么是人脸识别 老实说这一节中的人脸识别技术的演示的确很牛bi,但是演技好尴尬,233333 啥是人脸识别就不用介绍了,下面笔记会介绍如何实现人脸识别. 二.One-shot(一次)学习 假设我们 ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week3 目标检测
一.目标定位 这一小节视频主要介绍了我们在实现目标定位时标签该如何定义. 上图左下角给出了损失函数的计算公式(这里使用的是平方差) 如图示,加入我们需要定位出图像中是否有pedestrian,car, ...
- DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络
介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...
随机推荐
- 正确释放Vector的内存
http://blog.jobbole.com/37700/ 今天在看微博的时候, 有人提出了一个对于Vector内存泄露的疑问( Link). 博主采用 Vector存储一些数据,但是发现在执行 c ...
- 运行java web项目时报错:Several ports (8005, 8080, 8009) required
运行java web项目时报错:Several ports (8005, 8080, 8009) required 如下图 之所以报上面的错误是因为安装Tomcat的时候,已经把端口8005,8080 ...
- c语言的内存分析
1. 进制 1. 什么是进制 ● 是一种计数的方式,数值的表示形式 汉字:十一 十进制:11 二进制:1011 八进制:13 ● 多种进制:十进制.二进制.八进制.十六进制.也就是说,同一个 ...
- 2712:细菌繁殖-poj
2712:细菌繁殖 总时间限制: 1000ms 内存限制: 65536kB 描述 一种细菌的繁殖速度是每天成倍增长.例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,… ...
- python实战--数据结构二叉树
此文将讲述如何用python实战解决二叉树实验 前面已经讲述了python语言的基本用法,现在让我们实战一下具体明确python的用法 点击我进入python速成笔记 先看一下最终效果图: 首先我们要 ...
- 【C#入门教案-02】用记事本编写第一个C#程序-Hello World
02-用记事本编写第一个C#程序-Hello World 广东职业技术学院 欧浩源 [1]进行.NET程序开发的最基本环境配备 .NET Framework + 代码编辑工具(记事本或Noetpad ...
- 【前端开发】--js弹框
js三种弹框 一.普通弹框 这类弹框就是仅仅是个提示作用,并不会做其它操作 关键词:alert() 这个没啥好说的,就是一个弹框. 二.判断弹框 这类框有一个判断作用 关键字:conf ...
- Servlet&JSP-HTTP报文头获取及应用
完整代码请参考:https://github.com/devway9/java-exercise/tree/master/servlet-jsp 目录 1 HttpServletRequest获取报文 ...
- cinder块存储控制节点
#cinder块存储控制节点 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html #cinder块存储控制节点 #在控制 ...
- zzuli 1812: sort 排序
1812: sort Time Limit: 1 Sec Memory Limit: 128 MB Submit: 352 Solved: 216 SubmitStatusWeb Board De ...