机器学习|李宏毅课程笔记(四)CNN

目录

一、Fully Connected Network 

【全连接层处理图像】

【全连接层存在的问题?】

【改进/解决方法】

【CNN与FNN】

二、CNN

【CNN结构】

【CNN各层概述】

三、CNN层详述

【卷积层Convolution】

【输入与输出】

【卷积核】

【卷积层尺寸的计算原理】

【卷积计算】

【多输入通道卷积计算】

【多输出通道卷积计算】

【批处理卷积计算】

【卷积效果实例】

【池化层Pooling】

【参数】

【池化计算】

【池化效果】


一、Fully Connected Network 

相邻层的所有神经元之间都有连接,这称为全连接(fully-connected)。

 

【全连接层处理图像】

将图像用矩阵[H*W*RGB channel]来表示。全连接层需要把三维矩阵flatten为一维数据,作为一个拉直的向量,输入到神经网络里,这相当于把图像的每一个像素点都作为输入。

 

【全连接层存在的问题?】

但是没有必要将每个像素点都输入。正如人类不会仔细到逐像素点地看图片。一般会关注图片的某些特征、区域,而忽略其他。而且全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一维度的神经元)处理,所以无法利用与形状相关的信息。

【改进/解决方法】

添加特殊层做简化,可以提取图像的特征输入到神经网络,而不是将每个像素点整张图像都输入。

 

引入CNN:添加卷积层 Convolution 和池化层 Pooling】

在CNN中,层的连接顺序是 :Convolution - ReLU - Pooling.  Pooling有时被省略。

 

【CNN与FNN】

卷积层的神经元只与前一层的部分神经元节点相连,即它的神经元间的连接是非全连接的,且同一层中某些神经元之间的连接的权重 w 和偏移 b 是共享的(即相同的),这样大量地减少了需要训练参数的数量。

二、CNN

【CNN结构】

CNN由输入和输出层以及多个隐藏层组成,隐藏层可分为卷积层、池化层、RELU层和全连通层,如下图:

 

 

CNN各层概述】

输入层:CNN的输入为原始图像,三维(RGB)或二维的向量。

卷积层:CNN的核心,卷积层由一组可学习的滤波器/卷积核(filter/kernel)[带着固定权重的神经元]组成,它们具有小的感受野,每个卷积核具有kernel size,padding,stride等参数。从图像的左上角依次做内积操作,提取出图片的高层次特征。卷积层的输入输出数据称为特征图 Feature Map。

池化层:对卷积后输出的Feature Map进行下采样操作,保留原特征的同时减少神经网络训练的参数,防止过拟合。

激活层:在CNN中使用ReLu激活函数,在网络中引入了非线性。通过ReLu激活函数传递卷积运算的结果。因此,最终特征映射中的值不是简单的线性关系。

全连接层:全连接层的输入是一维向量,需要将Pooling 层的输出向量flatten成一个一维的向量,然后输入到全连接层中,最后送到Soft Max层进行类别的分类。

输出层:用于输出结果

三、CNN层详述

【卷积层Convolution】

卷积层由一组可学习的滤波器/卷积核(filter/kernel)组成,它们具有小的感受野,每个卷积核具有Kernel size,Padding,Stride等参数。

 

输入与输出】

输入矩阵格式:四个维度:样本数、图像通道数、图像高度、图像宽度

输出矩阵格式:与输出矩阵的维度顺序和含义相同,但是后三个维度(图像通道数、图像高度、图像宽度)尺寸发生变化

【卷积核】

卷积核是带着固定权重的神经元。可以看作是权重矩阵,矩阵里元素的值就是需要通过学习得到的参数

卷积核(权重矩阵)格式:四个维度:输出通道数(卷积核的个数)、输入通道数、卷积核高度、卷积核宽度  Eg:kernel_size=3表示卷积核是一个3*3矩阵。

卷积核的输入通道数(in_channels)由输入矩阵的通道数所决定。(红色标注)

卷积核的输出通道数(out_channels)决定输出矩阵的通道数。(绿色标注)

 

【卷积层尺寸的计算原理】

输出矩阵的高度和宽度这两个维度的尺寸由输入矩阵、卷积核、扫描方式共同决定。(蓝色标注)计算公式如下:

 

卷积层就是在做卷积计算。

【卷积计算】

从图像的左上角开始,将各个位置上滤波器(卷积核带着固定权重的神经元)的元素和输入的对应元素进行乘积累加运算,输出到对应位置提取出图片的高层次特征。卷积层的输入输出数据称为特征图 Feature Map。

 

如图,输入数据大小是 (5,5),滤波器大小是 (3,3)Stride=1,输出大小是 (3,3)

【Padding】

在进行卷积层运算前,有时会使用padding填充,向输入数据的周围填入固定的数据(比如0等)。Padding的目的/作用是调整输出的大小。

 

Stride

应用滤波器的位置间隔称为Stride步幅。之前的例子中步幅都是1,如果将步幅设为2,则如图所示,应用滤波器的窗口的间隔变为2个元素。增大步幅后,输出表小;增大填充后,步幅变化。

 

Padding、Stride的作用 动画呈现:

conv_arithmetic/README.md at master · vdumoulin/conv_arithmetic (github.com)

【多输入通道卷积计算】

 

【多输出通道卷积计算】

多个卷积核就是多个特征提取器。

 

【批处理卷积计算】

在卷积神经网络的计算中,通常将多个样本放在一起形成一个mini-batch进行批量操作。卷积运算进行批处理时,需要将在各层间传递的数据保存为4维数据。按(batch_size, channels, height, width)的顺序保存数据。数据作为4维的形状在各层间传递。这里需要注意的是,网络间传递的是4维数据,对这N个数据进行了卷积运算。也就是说,批处理将N次的处理汇总成了1次进行。

 

【卷积效果实例】

左边是图像输入,中间部分就是滤波器filter(带着一组固定权重的神经元),不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的特定信息:颜色深浅或轮廓。

 

【池化层Pooling】

当输入经过卷积层时,若感受视野比较小,步长Stride比较小,得到的Feature map (特征图)还是比较大,可以通过池化层来对每一个 Feature map进行降维操作,输出的深度还是不变的,依然为 Feature map 的个数。

【参数】

Kernel_size:池化核大小,设置取最大值的窗口,类似于卷积层的卷积核。

Stride:步径,与卷积层不同,默认值是Kernel_size的大小

padding:和卷积层一样,用法类似于Kernel_size。

Ceil_mode:在按照Stride移动进行匹配数据时,数据没有凑足kernel_size的大小,便涉及取舍问题,ceil_mode为True,则保留,若为False,则不保留。

 

池化计算】

池化层也有一个池化(filter)来对Feature map矩阵进行扫描,对池化核中的矩阵值进行计算,一般有两种计算方式:

Max pooling:取池化核矩阵中的最大值

Average pooling:取池化核矩阵中的平均值 扫描的过程中同样地会涉及的扫描步长stride,扫描方式同卷积层一样,先从左到右扫描,结束则向下移动布长大小,再从左到右。

 

【池化效果】

图像经最大化池化后会变模糊,类似于马赛克的效果。

参考链接:

cnn输入层_深入理解卷积神经网络(CNN)_weixin_39784263的博客-CSDN博客

CNN中卷积层的计算细节 - 知乎

[鱼书笔记] 深度学习入门:基于 Python 的理论与实现 个人笔记分享 - 呼啸山楂 - 博客园 (cnblogs.com)

听六小桨讲AI | 第2期:卷积的批量计算及应用案例 - 腾讯云开发者社区-腾讯云 (tencent.com)

神经网络——最大池化_放牛儿的博客-CSDN博客_最大池化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值