cnn程序流程图_深度学习(一)——CNN算法流程

cnn程序流程图_深度学习(一)——CNN算法流程深度学习(一)——CNN(卷积神经网络)算法流程0引言20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(ConvolutionalNeuralNetworks-简称CNN)。现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于该网络避免了对图像的复杂前…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

深度学习(一)——CNN(卷积神经网络)算法流程

0 引言

20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(Convolutional Neural Networks-简称CNN)。现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,因而得到了更为广泛的应用。 K.Fukushima在1980年提出的新识别机是卷积神经网络的第一个实现网络。随后,更多的科研工作者对该网络进行了改进。其中,具有代表性的研究成果是Alexander和Taylor提出的“改进认知机”,该方法综合了各种改进方法的优点并避免了耗时的误差反向传播。

一般地,CNN的基本结构包括两层:

1)特征提取层:每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;

2)特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。

此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减小了特征分辨率。

1 神经网络结构

如图为单层神经网络:

cnn程序流程图_深度学习(一)——CNN算法流程

其计算表达式如下:

cnn程序流程图_深度学习(一)——CNN算法流程

其中,该单元也可以被称作是Logistic回归模型。当将多个单元组合起来并具有分层结构时,就形成了神经网络模型如下图所示:

cnn程序流程图_深度学习(一)——CNN算法流程

则其表达式如下所示

cnn程序流程图_深度学习(一)——CNN算法流程

如此一层一层的加上去,最终就形成了深度神经网络。而本文的卷积神经网络就是一种深度神经网络。

2 卷积神经网络

卷积神经网络CNN的结构一般包含这几个层(如图1):

1)输入层:用于数据的输入

2)卷积层:使用卷积核进行特征提取和特征映射

3)激励层:由于卷积也是一种线性运算,因此需要增加非线性映射

4)池化层:进行下采样,对特征图稀疏处理,减少数据运算量。

5)全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失

在卷积神经网络中,有几个特别重要的改进思路和技术,为了降低神经网络节点,来提高学习效率,具体如下所述:

2.1 局部感知

卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。如下图所示:左图为全连接,右图为局部连接。

cnn程序流程图_深度学习(一)——CNN算法流程

在上右图中,假如每个神经元只和10×10个像素值相连,那么权值数据为1000000×100个参数,减少为原来的千分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。

2.2 参数共享

但其实这样的话参数仍然过多,那么就启动第二级神器,即权值共享。在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。

怎么理解权值共享呢?我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。

更直观一些,当从一个大尺寸图像中随机选取一小块,比如说 8×8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8×8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8×8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。

如下图所示,展示了一个33的卷积核在55的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。

cnn程序流程图_深度学习(一)——CNN算法流程

2.3 多卷积核

上面所述只有100个参数时,表明只有1个100*100的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比如32个卷积核,可以学习32种特征。在有多个卷积核时,如下图所示:

cnn程序流程图_深度学习(一)——CNN算法流程

上图右,不同颜色表明不同的卷积核。每个卷积核都会将图像生成为另一幅图像。比如两个卷积核就可以将生成两幅图像,这两幅图像可以看做是一张图像的不同的通道。如下图所示,下图有个小错误,即将w1改为w0,w2改为w1即可。下文中仍以w1和w2称呼它们。

下图展示了在四个通道上的卷积操作,有两个卷积核,生成两个通道。其中需要注意的是,四个通道上每个通道对应一个卷积核,先将w2忽略,只看w1,那么在w1的某位置(i,j)处的值,是由四个通道上(i,j)处的卷积结果相加然后再取激活函数值得到的。

cnn程序流程图_深度学习(一)——CNN算法流程

cnn程序流程图_深度学习(一)——CNN算法流程

所以,在上图由4个通道卷积得到2个通道的过程中,参数的数目为4×2×2×2个,其中4表示4个通道,第一个2表示生成2个通道,最后的2×2表示卷积核大小。

2.4 Down-pooling

在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。

为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

cnn程序流程图_深度学习(一)——CNN算法流程

至此,卷积神经网络的基本结构和原理已经阐述完毕。

2.5 多层卷积

在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积的目的是一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196614.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月23日 下午3:15
下一篇 2025年9月23日 下午3:43


相关推荐

  • 笔记本计算机卡,笔记本电脑越来越卡怎么办 不同原因解决方法不同[通俗易懂]

    笔记本计算机卡,笔记本电脑越来越卡怎么办 不同原因解决方法不同[通俗易懂]1、由于系统原因导致笔记本越用越卡的问题,懂装系统并且不怕麻烦的用户可以重装新系统,这样可以彻底解决系统卡顿问题,适当的清理一些不要的垃圾文件软件等,若是不懂得小白或者怕麻烦的人,也可以选择市面上的各类XX安全卫士、XX电脑管家带有的垃圾清理功能清理一些垃圾文件及注册表等无用文件、软件,并且养成定期清理垃圾的好习惯。2、由于硬件原因导致笔记本越用越卡的问题,则需要看看笔记本是因为哪些硬件导致的,决…

    2025年11月1日
    3
  • 基于SSM的校园二手交易平台的设计与实现「建议收藏」

    基于SSM的校园二手交易平台的设计与实现「建议收藏」PS:Java版本:1.7数据库:MySQL框架:Spring+SpringMVC+MyBatis服务器:Tomcat前端解析框架:Thymeleaf开发工具:Idea2017版本管理工具:Maven版本控制工具:GitHub下载地址:https://download.csdn.net/download/wsk1103/10395604一、设计概…

    2022年4月29日
    38
  • service mesh框架对比_k8s containerd

    service mesh框架对比_k8s containerdservice用于4层路由负载 ingress用于7层路由负载1 Service介绍在kubernetes中,Pod是应用程序的载体,我们可以通过Pod的IP来访问应用程序,但是Pod的IP地址不是固定的,这就意味着不方便直接采用Pod的IP对服务进行访问。为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个Pod进行聚合,并且提供一个统一的入口地址,通过访问Service的入口地址就能访问到后面的Pod服务。Service在很多情况下只是一个概念

    2022年8月11日
    9
  • Linux下如何挂载磁盘[通俗易懂]

    Linux下如何挂载磁盘[通俗易懂]使用虚拟机时发现磁盘空间不够了,需要挂载一个磁盘以供继续使用,但是磁盘不是添加就可以使用的,还需要进行挂载。一、添加磁盘添加加新硬盘重启服务器添加完之后就可以重启机器了,如果你机器是开启的,进入系统并不能看见你刚添加的那块磁盘,只有等系统重启,重新加载之后才会显示安装的那块磁盘二、进入系统使用root用户进入系统三、查看硬盘信息[root@localhost~]#fdi

    2022年6月19日
    38
  • 使用C语言实现字符串分割

    使用C语言实现字符串分割之前分享了一篇使用C++(std::string作为容器)进行字符串分割的博文:https://blog.csdn.net/r5014/article/details/82802664 现在又想用C语言做一个字符串分割的函数,大概功能是这样:需要分割的字符串“  thisisacharactor raw.  ”使用”分割分割之后会返回一个char**…

    2022年5月20日
    42
  • sftp常用命令介绍_手机命令代码

    sftp常用命令介绍_手机命令代码一、SFTP简述二、SFTP服务配置(基于CentOS7)三、SFTP常用命令四、Java代码实现SFTP操作(JSch实现上传、下载、监视器)源码请见Github:https://github.com/qiezhichao/CodeHelper/tree/master/j_sftp五、踩坑记录一、SFTP简述sftp(SecureFileTransfer…

    2022年4月19日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号