本文共 3012 字,大约阅读时间需要 10 分钟。
title: ‘DeepLearning.ai笔记:(4-1)-- 卷积神经网络(Foundations of CNN)’
id: dl-ai-4-1 tags:首发于个人博客:,欢迎来访
第四门课开始就学习深度学习关于计算机视觉的重要应用—卷积神经网络。第一周主要是对卷积神经网络的基本构造和原理做了介绍。
计算机视觉是深度学习的一个非常重要的应用。比如图像分类,目标检测,图片风格迁移等。
用传统的深度学习算法,假设你有一张 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是填充的意思。
我们可以从之前的例子看到,每经过一次卷积运算,图片的像素都会变小,从 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有两种:
卷积的步长也就是每一次运算后平移的距离,之前使用都是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。
这里要搞清两个概念,卷积核的通道数和个数:
单层卷积网络
如图是单层卷积的基本过程,先经过两个卷积核,然后再加上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
在这里总结了各个参数的表示方法:
简单神经网络
一般卷积神经网络层的类型有:
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的卷积神经网络结构。
各个层的参数是这样的:
可以看到,在卷积层的参数非常少,池化层没有参数,大量的参数在全连接层。
这里给出了两点主要原因:
转载地址:http://wrrii.baihongyu.com/