卷积神经网络

卷积神经网络(CNN)通过卷积运算提取图像特征,包括垂直和水平边缘检测。Padding和Stride用于保持输出尺寸,三维卷积处理RGB图像。CNN结构通常包含卷积层、池化层和全连接层,用于特征提取、减少冗余和最终分类。通过使用小尺寸过滤器,CNN避免过拟合,适用于大规模图像数据。
摘要由CSDN通过智能技术生成

卷积神经网络

1、卷积神经网络是什么?

(1)、卷积运算

假设一个6 * 6的图片像素矩阵A与一个3 * 3的矩阵B进行卷积运算,则生成一个4 * 4的矩阵C.
[ 3 0 1 2 7 4 1 5 8 9 3 1 2 7 2 5 1 3 0 1 3 1 7 8 4 2 1 6 2 8 2 4 5 2 3 9 ] ∗ ( 卷 积 运 算 ) [ 1 0 − 1 1 0 − 1 1 0 − 1 ] = [ − 5 − 4 0 8 − 10 − 2 2 3 0 − 2 − 4 − 7 − 3 − 2 − 3 − 16 ] \left[ %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 3 & 0 & 1 & 2 & 7 & 4\\ %第一行元素 1 & 5 & 8 & 9 & 3 & 1\\ %第二行元素 2 & 7 & 2 & 5 & 1 & 3\\ 0 & 1 & 3 & 1 & 7 & 8\\ 4 & 2 & 1 & 6 & 2 & 8\\ 2 & 4 & 5 & 2 & 3 & 9\\ \end{array} \right] %右括号 *(卷积运算) \left[ %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 1 & 0 & -1\\ 1 & 0 & -1\\ 1 & 0 & -1\\ \end{array} \right] =\\ \left[ %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 -5 & -4 & 0 & 8\\ -10 & -2 & 2 & 3\\ 0 & -2 & -4 & -7\\ -3 & -2 & -3 & -16\\ \end{array} \right] 312042057124182315295162731723413889()111000111=510034222024383716
C11 对应运算为3 * 1 + 1 * 1 + 2 * 1 + 0 * 0 + 5 * 0 + 7 * 0 + 1 * -1 + 8 * -1 + 2 * -1 = -5
https://gitee.com/wusongu/img-gitee/raw/master/202106/20210606_002734081_0.png

依次类推,C12对应
https://gitee.com/wusongu/img-gitee/raw/master/202106/20210606_002742149_0.png
B矩阵通常被称为过滤器(filter),B矩阵有很明显的规律,经过运算可以检测出垂直边缘的变化,所以这种被称为垂直边缘检测。

不仅如此,还可以检测明暗变化的边缘

在这里插入图片描述

将B矩阵转置,则会检测水平方向的边缘检测。
在这里插入图片描述
依据这个过滤器,我们可以提取出图片的简单特征(垂直或水平的明暗变化)

(2)、Padding与Stride

但是,卷积运算会产生问题:

1、n * n 的矩阵与f * f的矩阵进行卷积运算,会产生一个(n - f + 1) * (n - f + 1)的矩阵,会造成图片矩阵缩小。

2、对于边缘的元素,只进行了一次运算,如A11元素。

所以,针对这两个问题,也需要相对的解决方法
①Padding:

所谓Padding,就是在原始图片中进行填充,如 6 * 6的矩阵进行边缘填充,可变为8 * 8的矩阵。
[ 3 0 1 2 7 4 1 5 8 9 3 1 2 7 2 5 1 3 0 1 3 1 7 8 4 2 1 6 2 8 2 4 5 2 3 9 ] − − > [ 0 0 0 0 0 0 0 0 0 3 0 1 2 7 4 0 0 1 5 8 9 3 1 0 0 2 7 2 5 1 3 0 0 0 1 3 1 7 8 0 0 4 2 1 6 2 8 0 0 2 4 5 2 3 9 0 0 0 0 0 0 0 0 0 ] %开始数学环境 \left[ %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 3 & 0 & 1 & 2 & 7 & 4\\ %第一行元素 1 & 5 & 8 & 9 & 3 & 1\\ %第二行元素 2 & 7 & 2 & 5 & 1 & 3\\ 0 & 1 & 3 & 1 & 7 & 8\\ 4 & 2 & 1 & 6 & 2 & 8\\ 2 & 4 & 5 & 2 & 3 & 9\\ \end{array} \right] %右括号 --> \left[ %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 3 & 0 & 1 & 2 & 7 & 4 & 0\\ 0 & 1 & 5 & 8 & 9 & 3 & 1 & 0\\ 0 & 2 & 7 & 2 & 5 & 1 & 3 & 0\\ 0 & 0 & 1 & 3 & 1 & 7 & 8 & 0\\ 0 & 4 & 2 & 1 & 6 & 2 & 8 & 0\\ 0 & 2 & 4 & 5 & 2 & 3 & 9 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ \end{array} \right] %右括号 312042057124182315295162731723413889>0000000003120420005712400182315002951620073172300413889000000000
输出图像还是原来的6 * 6矩阵。

在运算中,Valid convolutions是不进行填充的卷积

而same convolutions是进行填充的卷积运算,要求输入的矩阵与输出的矩阵大小要相同。在这种情况下,填充大小为(f - 1)/2,所以f通常是奇数。

加入padding后再进行卷积运算
在这里插入图片描述

②卷积步长

每次卷积运算移动的步长,在前面进行卷积运算时,移动的步长记为S,S = 1,S =2时,则会产生下面的变化:

1、

image-20210605153310720

2、

在这里插入图片描述

这样会得到3 * 3的矩阵。

所以padding =p,stride = s,进行卷积运算时会产生矩阵:

n * n矩阵与 f * f矩阵会产生一个[(n + 2p -f)/s + 1] * [(n + 2p -f)/s + 1]的矩阵。

2、三维卷积

以上我们进行的是二维卷积运算,处理的是灰度,而对于RGB三通道的图像需要多维的卷积运算,如 6 * 6的RGB三通道的矩阵,则表示为6 * 6 * 3,而相应的过滤器也应该变为 3 * 3 * 3矩阵,最终的矩阵也变为4 * 4矩阵。

image-20210605162711607

如果只关注红色通道的特征,则可以把特征值设置为:
R [ 1 0 − 1 1 0 − 1 1 0 − 1 ] G [ 0 0 0 0 0 0 0 0 0 ] B [ 0 0 0 0 0 0 0 0 0 ] R \left[ %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 1 & 0 & -1\\ 1 & 0 & -1\\ 1 & 0 & -1 \end{array} \right] %右括号\\ \\ G \left[ %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 0 & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{array} \right] %右括 \\ B \left[ %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 0 & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0 \end{array} \right] %右括号 R111000111G000000000B000000000
如此,我们实现了如何进行三维的卷积运算,需要注意的是,如果定义3个不同的过滤器,则会产生的矩阵也变为4 * 4 * 3的三维矩阵。

3、卷积神经网络

类比之前的神经网络模型,过滤器矩阵F就相当于之前的权重矩阵W
之 前 的 矩 阵 , g ( x ) 表 示 非 线 性 激 活 函 数 , b 表 示 b i a s o u t p u t = g ( i n p u t ∗ w + b ) 而 在 卷 积 神 经 网 络 中 , 用 ⊙ 表 示 卷 积 运 算 o u t p u t = g ( i n p u t ⊙ F + b ) 之前的矩阵,g(x)表示非线性激活函数,b表示bias\\ output = g(input * w + b)\\ 而在卷积神经网络中,用⊙表示卷积运算\\ output = g(input ⊙ F + b) g(x)线,bbiasoutput=g(inputw+b)output=g(inputF+b)
所以,卷积神经网络的一大特征就出来了,如果输入的图片像素矩阵是1000 * 1000或是 2000 * 2000,,传统的神经网络需要根据特征值的多少来设计权重矩阵,1000 * 1000的矩阵最少也要包含个1000 * 1000的权重参数, 但是对于过滤器参数矩阵F来说,大小的变化可以不根据输入矩阵大小变化(Padding和Stride保证了输入与输出的矩阵大小相同),每层神经网络都能用3 * 3 *3的过滤器提取特征,这样就可以避免因为参数过多而导致的过拟合问题。

卷积神经网络的结构

通常情况下,卷积神经网络分为三层,卷积层、池化层、全连接层

卷积层

卷积层的作用是提取图像的特征,经过不同维度的过滤器一层层的卷积运算,最终得到符合的特征矩阵。

池化层

其主要作用是减少冗余的无关特征值,即使经过卷积运算的图像,也是包含很多冗余特征值,所以,需要将图片精简且不改变特性,常用的操作有最大和平均池化。

Max Pooling

将矩阵中卷积核所映射的区域中最大的值取出,生成新的矩阵。
在这里插入图片描述

在此图中,卷积核的大小为2 * 2,步长为2,生成的是 2 * 2的矩阵。当然这些都可以变化,如图。

在这里插入图片描述

Average Pooling

此时选取的是过滤器覆盖区域的平均值,如图所示。

image-20210607000516823

注意:池化层是确定的,不需要进行训练

全连接层

经过卷积运算和池化,此时的特征值的数量级已经可以被我们接受了,那么需要再添加全连接层,此层类似于我们之前学到的单层神经网络,主要是对高度抽象化的特征值进行整合,归一化,在输出概率值。

img

至此,卷积神经网络的大致模型就出来了,通常会采用

卷积–>池化–>卷积–>池化–>全连接

当然,这不是绝对的,可以根据实际情况调整为多层卷积后再池化或者引入多层全连接层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值