ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CNN卷积神经网络

2022-09-05 15:00:08  阅读:171  来源: 互联网

标签:输出 卷积 矩阵 神经网络 池化 CNN 输入


CNN网络结构

神经网络的发展历史中介绍了,CNN被广泛应用与图像领域,本文对CNN网络结构与算法进行进一步的介绍。

基本网络结构

CNN的网络结构一般包括:

  • 输入层
  • 由若干卷积层、激活函数、池化层、全连接层组成的隐藏层
  • 使用softmax激活函数的输出层

卷积运算

CNN中的卷积运行表示为:

\[S(i,j) = (X*W)(i,j) = \sum_m\sum_nX(i+m)(j+n)W(m,n) \]

其中,X表示输入,W表示卷积核

卷积层

CNN的卷积运算其实就是对输入的局部矩阵和卷积核的矩阵各个位置上的元素相乘再相加。
例如下图,输入为一个3×4的矩阵,卷积核为2×2的矩阵,卷积每次移动的步长为1。首先对输入矩阵左上角的2×2的矩阵与卷积核矩阵进行按位置相乘相加的运算,即得到卷积后第一个元素的值:aw+bx+ey+fz。接着对卷积核向右移动一个位置,对第二个局部矩阵(b,c,f,g)与卷积核进行卷积运算,得到结果: bw+cx+fy+gz,以此类推,最终得到的卷积层输出为一个2×3的矩阵。
image

对卷积层的输出,一般会通过ReLU激活函数(\(Relu(x) = max(0,x)\)),将输出张量中小于0的元素值都变为0。

池化层

池化层的作用是对输入张量的各个子矩阵进行压缩,例如2×2的池化,就是将子矩阵的每2×2个元素变成一个元素,3×3的池化就是将子矩阵的每3×3个元素变成一个元素。
对输入子矩阵的n×n个元素变成一个,一般有两个方法:一个是Max,即取所有元素的最大值。另一个是Average,即取所有元素的平均值。

下图示例:按照最大池化方法,采用2×2的池化,步进为2.
首先对红色2x2区域进行池化,由于此2x2区域的最大值为6.那么对应的池化输出位置的值为6,由于步幅为2,此时移动到绿色的位置去进行池化,输出的最大值为8.同样的方法,可以得到黄色区域和蓝色区域的输出值。最终,我们的输入4x4的矩阵在池化后变成了2x2的矩阵。进行了压缩。
image

CNN前向传播算法

输入层到卷积层的前向传播

输入层是第一层,一般输入层连接的第二层都是卷积层。输入层到卷积层的前向传播的表达式:

\[a^2 = \sigma(z^2) = \sigma(a^1 * W^2 + b^2) \]

其中:上标代表层数,星号代表卷积,b代表偏移向量,\(\sigma\)代表激活函数,一般为ReLU

隐藏层到卷积层的前向传播

类似的,卷积层处于网络结构中间位置的情况下,隐藏层向卷积层的前向传播算法可以表示为:

\[a^l = \sigma(z^l) = \sigma(a^{l-1} * W^l + b^l) \]

隐藏层到池化层的前向传播

池化层的目的是对输入进行压缩,例如输入矩阵是N×N维的,池化大小是K×K的区域,则输出的矩阵是\(\frac{N}{K} * \frac{N}{K}\)维。

隐藏层到池化层前向传播涉及的参数包括:

  • 池化区域的大小K
  • 池化标准,一般是Average、Max

隐藏层到全连接层的前向传播

全连接层与DNN模型相同,前向传播算法为:

\[a^l = \sigma(z^l) = \sigma(W^la^{l-1}) + b^l \]

这里的激活函数\(\sigma\)一般为sigmoid或tanh。

隐藏层到全连接层前向传播涉及的参数包括:

  • 全连接层的激活函数,如sigmoid、tanh
  • 全连接层的神经元个数

经过若干全连接层之后,最后一层为softmax输出层,输出层和普通全连接层的唯一区别是使用softmax函数。

CNN前向传播算法小结

输入

  • 输入数据,如图片样本
  • CNN模型的层数
  • 所有隐藏层的类型
  • 对于卷积层,涉及卷积核的大小K,卷积核子矩阵的维度F,填充大小P,步进S
  • 对于池化层,涉及池化区域大小,池化标准(如Max、Average等)
  • 对于全连接层,涉及全连接层的激活函数(输出层除外),各层的审计格式

输出

CNN的模型输出\(a^L\)

前向传播算法

1、根据输出层的填充大小P,填充原始图片的边缘,得到输入张量\(a^1\)
2、初始化所有隐藏层的参数W、b
3、for \(l\)=2 to \(L-1\):
a) 如果第\(l\)层为卷积层,则输出为:

\[a^l = ReLU(z^l) = ReLU(a^{l-1} * W^l + b^l) \]

b) 如果第\(l\)层是池化层,则输出为:

\[a^l = pool(a^{l-1}) \]

其中pool指按照池化区域大小k和池化标准将输入张量缩小的过程

c) 如果第\(l\)层是全连接层,则输出为:

\[a^l = \sigma(z^l) = \sigma(W^la^{l-1}) + b^l \]

4、对于输出层(第L层):

\[a^L = softmax(z^L) = softmax(W^La^{L-1} + b^L) \]

参考

https://www.cnblogs.com/pinard/p/6483207.html

标签:输出,卷积,矩阵,神经网络,池化,CNN,输入
来源: https://www.cnblogs.com/init0ne/p/16635391.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有