DeepLearning.ai笔记:(4-1)-- 卷积神经网络(Foundations of CNN)
title: ‘DeepLearning.ai笔记:(4-1)-- 卷积神经网络(Foundations of CNN)’id: dl-ai-4-1tags:dl.aicategories:AIDeep Learningdate: 2018-09-30 10:20:54首发于个人博客:fangzh.top,欢迎来访第四门课开始就学习深度学习关于计算机视觉的重要应用—卷积...
title: ‘DeepLearning.ai笔记:(4-1)-- 卷积神经网络(Foundations of CNN)’
id: dl-ai-4-1
tags:
- dl.ai
categories: - AI
- Deep Learning
date: 2018-09-30 10:20:54
首发于个人博客:fangzh.top,欢迎来访
第四门课开始就学习深度学习关于计算机视觉的重要应用—卷积神经网络。
第一周主要是对卷积神经网络的基本构造和原理做了介绍。
计算机视觉
计算机视觉是深度学习的一个非常重要的应用。比如图像分类,目标检测,图片风格迁移等。
用传统的深度学习算法,假设你有一张 64 × 64 64×64 64×64的猫片,又有RGB三通道,那么这个时候是 64 × 64 × 3 = 12288 64×64×3=12288 64×64×3=12288,input layer的维度就是12288,这样其实也还可以,因为图片很小。那么如果你有 1000 × 1000 1000×1000 1000×1000的照片呢,你的向量就会有300万!假设有1000个隐藏神经元,那么就是第一层的参数矩阵 W W W有30亿个参数!算到地老天荒。所以用传统的深度学习算法是不现实的。
边缘检测
如图,这些边缘检测中,用水平检测和垂直检测会得到不同的结果。
垂直检测如下图,用一个 3 × 3 3×3 3×3的过滤器(filter),也叫卷积核,在原图片 6 × 6 6×6 6×6的对应地方按元素相乘,得到 4 × 4 4×4 4×4的图片。
可以看到,用垂直边缘的filter可以将原图片中间的边缘区分出来,也就是得到了最右图中最亮的部分即为检测到的边缘。
当然,如果左图的亮暗分界线反过来,则输出图片中最暗的部分表示边缘。
也自然有水平的边缘分类器。
还有更复杂的,但是我们不需要进行人工的决定这些filter是什么,因为我们可以通过训练,让机器自己学到这些参数。
padding
padding是填充的意思。
-
我们可以从之前的例子看到,每经过一次卷积运算,图片的像素都会变小,从 6 × 6 − − − > 4 × 4 6×6 ---> 4×4 6×6−−−>4×4,这样子图片就会越来越小,后面就毛都不剩了。
-
还有一点就是,从卷积的运算方法来看,边缘和角落的位置卷积的次数少,会丢失有用信息。
所以就有padding的想法了,也就是在图片四周填补上像素。
计算方法如下,
原数据是 n × n n \times n n×n,filter为 f × f f \times f f×f,padding为 p × p p \times p p×p,
那么得到的矩阵大小是 ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) (n + 2p -f +1)\times(n + 2p -f +1) (n+2p−f+1)×(n+2p−f+1)
padding有两种:
- valid:也就是不填充
- same:输入与输出大小相同的图片, p = ( f − 1 ) / 2 p=(f - 1) / 2 p=(f−1)/2,一般padding为奇数,因为filter是奇数
stride(步长)
卷积的步长也就是每一次运算后平移的距离,之前使用都是stride=1。
假设stride=2,就会得到:
得到的矩阵大小是
⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ \lfloor \frac{n+2p-f}{s}+1\rfloor \times \lfloor \frac{n+2p-f}{s}+1\rfloor ⌊sn+2p−f+1⌋×⌊sn+2p−f+1⌋
向下取整: 59/60 = 0
立体卷积
之前都是单通道的图片进行卷积,如果有RGB三种颜色的话,就要使用立体卷积了。
这个时候的卷积核就变成了 3 × 3 × 3 3 \times 3 \times 3 3×3×3的三维卷积核,一共27个参数,每次对应着原图片上的RGB一共27个像素运算,然后求和得到输出图片的一个像素。因为只有一个卷积核,这个时候输出的还是 4 × 4 × 1 4 \times 4 \times 1 4×4×1的图片。
多个卷积核
因为不同的卷积核可以提取不同的图片特征,所以可以有很多个卷积核,同时提取图片的特征,如分别提取图片的水平和垂直边缘特征。
因为有了两个卷积核,这时候输出的图片就是有两通道的图片 4 × 4 × 2 4\times 4 \times 2 4×4×2。
这里要搞清两个概念,卷积核的通道数和个数:
- 通道数channel:即卷积核要作用在原图片上,原图片的通道处 n c n_c nc,卷积核的通道数必须和原图片通道数相同
- 个数:即要使用多少个这样的卷积核,使用 n c ′ n_{c}^{\prime} nc′表示,卷积核的个数也就是输出图片的通道数,如有两个卷积核,那么生成了 4 × 4 × 2 4\times 4 \times 2 4×4×2的图片,2 就是卷积核的个数
- 即 n × n × n c n \times n \times n_c n×n×nc ,乘上的 n c ′ n_{c}^{\prime} nc′个卷积核 $ f \times f \times n_c , 得 到 ,得到 ,得到(n -f +1)\times (n - f +1 ) \times n_{c}^{\prime}$的新图片
卷积神经网络
单层卷积网络
如图是单层卷积的基本过程,先经过两个卷积核,然后再加上bias进行relu激活函数。
那么假设某层卷积层有10个 3 × 3 × 3 3 \times 3 \times 3 3×3×3的卷积核,那么一共有 ( 3 × 3 × 3 + 1 ) × 10 = 280 (3\times3\times3+1) \times10=280 (3×3×3+1)×10=280个参数,加1是加上了bias
在这里总结了各个参数的表示方法:
简单神经网络
一般卷积神经网络层的类型有:
- convolution卷积层
- pool池化层
- fully connected全连接层
池化层
pooling 的作用就是用来压缩数据,加速运算,提高提取特征的鲁棒性
Max pooling
在范围内取最大值
Average Pooling
取平均值
卷积神经网络示例
一般conv后都会进行pooling,所以可以把conv和pooling当做一层。
如上图就是 c o n v − p o o l − c o n v − p o o l − f c − f c − f c − s o f t m a x conv-pool-conv-pool-fc-fc-fc-softmax conv−pool−conv−pool−fc−fc−fc−softmax的卷积神经网络结构。
各个层的参数是这样的:
可以看到,在卷积层的参数非常少,池化层没有参数,大量的参数在全连接层。
为何用卷积神经网络?
这里给出了两点主要原因:
- 参数共享:卷积核的参数是原图片中各个像素之间共享的,所以大大减少了参数
- 连接的稀疏性:每个输出值,实际上只取决于很少量的输入而已。
更多推荐
所有评论(0)