包含lenet是谁发明的的词条

本篇文章给大家谈谈lenet是谁发明的,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

文章目录:

卷积神经网络卷积层算完数据超阈怎么办

、计算方法不同1、前馈神经网络:一种最简单的神经网络,各神经元分层排列AI爱发猫 。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。

2、BP神经网络:是一种按照误差逆向传播算法训练的多层前馈神经网络。3、卷积神经网络:包含卷积计算且具尘中有深度结构的前馈神经网络。

二、用途不同1、前馈神经网络:主要应用包括感知器网络、BP网络和RBF网络。

2、BP神经网络:(1)函数逼近:用输入向量和相应的输出向量训练一个网络逼近一个函数;(2)模式识别:用一个待定的输出向量将它与输入向量联系起来;(3)分类:把输入向量所定义的合适方式进行分类;(4)数据压缩:减少输出向量维数以便于传输或存储。

3、卷积神经网络:可应用于图像识别、物体识别等计算机视觉、自然语言处理、物理学和遥感科学等领域。联系:BP神经网络和卷颂兄拆积神经网络都属于前馈神经网络,三者都属于人工神经网络。因此,三者原理和结构相同。

三、作用不同1、前馈神经网络:结构简单,应用广泛,能够以任意精度逼近任意连续函数及平方可积函数.而且可以精确实现任意有限训练样本集。2、BP神经网络:具有很强的非线性映射能力和柔性的网络结构。

网络的中间层数、各层的神经元个数可根据具体情况任意设定,并且随着结构的差异其性能也有所不同。3、卷积神经网络:具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类。

扩展资料:1、BP神经网络优劣势BP神经网络无论在网络理论还是在性能方面已比较成熟。其突出优点就是具有很强的非线性映射能力和柔性的网络结构。

网络的中间层数、各层的神经元个数可根据具体情况任意设定,并且随着结构的差异其性能也有所不同。但是BP神经网络也存在以下的一些主要缺陷。

①学习速度野枣慢,即使是一个简单的问题,一般也需要几百次甚至上千次的学习才能收敛。②容易陷入局部极小值。③网络层数、神经元个数的选择没有相应的理论指导。④网络推广能力有限。

2、人工神经网络的特点和优越性,主要表现在以下三个方面①具有自学习功能。

例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能,慢慢学会识别类似的图像。自学习功能对于预测有特别重要的意义。

预期未来的人工神经网络计算机将为人类提供经济预测、效益预测,其应用前途是很远大的。②具有联想存储功能。用人工神经网络的反馈网络就可以实现这种联想。③具有高速寻找优化解的能力。

寻找一个复杂问题的优化解,往往需要很大的计算量,利用一个针对某问题而设计的反馈型人工神经网络,发挥计算机的高速运算能力,可能很快找到优化解。

参考资料:百度百科—前馈神经网络百度百科—BP神经网络百度百科—卷积神经网络百度百科—人工神经网络。

卷积神经网络处理规格不同的图片

用卷积神经网络处理 “图” 结构数据应该怎么办

卷积神经网络有以下几种应用可供研究:1、基于卷积网络的形状识别物体的形状是人的视觉系统分析和识别物体的基础,几何形状是物体的本质特征的表现,并具有平移、缩放和旋转不变等特点,所以在模式识别领域,对于形状的分析和识别具有十分重要的意义,而二维图像作为三维图像的特例以及组成部分,因此二维图像的识别是三维图像识别的基础。

2、基于卷积网络的人脸检测卷积神经网络与传统的人脸检测方法不同,它是通过直接作用于输入样本,用样本来训练网络并最终实现检测任务的。

它是非参数型的人脸检测方法,可以省去传统方法中建模、参数估计以及参数检验、重建模型等的一系列复杂过程。本文针对图像中任意大小、位置、姿势、方向、肤色、面部表情和光照条件的人脸。

3、文字识别系统在经典的模式识别中,一般是事先提取特征。提取诸多特征后,要对这些特征进行相关性分析,找到最能代表字符的特征,去掉对分类无关和自相关的特征。

然而,这些特征的提取太过依赖人的经验和主观意识,提取到的特征的不同对分类性能影响很大,甚至提取的特征的顺序也会影响最后的分类性能。同时,图像预处理的好坏也会影响到提取的特征。

卷积神经网络为什么最后接一个全连接层

在常见的卷积神经网络的最后往往会出现一两层全连接层,全连接一般会把卷积输出的二维特征图(featuremap)转化成(N*1)一维的一个向量全连接的目的是什么呢?

因为传统的端到到的卷积神经网络的输出都是分类(一般都是一个概率值),也就是几个类别的概率甚至就是一个数--类别号,那么全连接层就是高度提纯的特征了,方便交给最后的分类器或者回归。

但是全连接的参数实在是太多了,你想这张图里就有20*12*12*100个参数,前面随便一层卷积,假设卷积核是7*7的,厚度是64,那也才7*7*64,所以现在的趋势是尽量避免全连接,目前主流的一个方法是全局平均值。

也就是最后那一层的featuremap(最后一层卷积的输出结果),直接求平均值。有多少种分类就训练多少层,这十个数字就是对应的概率或者叫置信度。

卷积神经网络是如何反向调整参数的?

卷积神经网络的模型问题? 50

怎么又是你.....网络自然是搭建起来的啊,比如CNN,一层一层地建,如果你是用别人已经建好的网络,比如最简单的LeNet-5,那么Tensorflow中会直接提供你一个Net;但是如果你是自定义网络类型,那么需要继承nn.Nodules,然后重新定义网络结构,封装成一个Net,总结起来,模型是很多数学公式搭在一起,然鹅,数学公式是封装好的,可以相互交流哈。

 

打开CSDN,阅读体验更佳

卷积神经网络的缺点是什么?_土豆西瓜大芝麻的博客_卷积神经...

平移不变性 当我们说平移不变性时,我们意思是,稍微改变同一物体的朝向或位置,可能并不会激活那些识别该物体的神经元。 正如上图所示,假如一个神经元是用来识别一只猫的,其参数会随着猫的位置和转动的变化而变化。虽然数据扩增(data aug...

卷积神经网络存在的问题,卷积神经网络的卷积层_普通网友的博客-CSDN博 ...

对于无法完美解决的梯度消失问题,一个可能部分解决梯度消失问题的办法是使用ReLU(RectifiedLinearUnit)激活函数,ReLU在卷积神经网络CNN中得到了广泛的应用,在CNN中梯度消失似乎不再是问题。 那么它是什么样子呢?其实很简单,比我们前面提到的...

最新发布 影响深度卷积神经网络算法的关键参数是网络结构

局部连接的概念参考局部感受域,即某个视神经元仅考虑某一个小区域的视觉输入,因此相比普通神经网络的全连接层(下一层的某一个神经元需要与前一层的所有节点连接),卷积网络的某一个卷积层的所有节点只负责前层输入的某一个区域(比如某个3*3的方块)。卷积神经网络的连接性:卷积神经网络中卷积层间的连接被称为稀疏连接(sparse connection),即相比于前馈神经网络中的全连接,卷积层中的神经元仅与其相邻层的部分,而非全部神经元相连。权重共享和稀疏连接一样,减少了卷积神经网络的参数总量,并具有正则化的效果。

继续访问

卷积神经网络难点梳理

目录1 基本概念及原理1.1 基本概念1.2 基本原理2 卷积是怎么“卷”的2.1 数学中的卷积2.2 CNN中的卷积3 损失函数是怎样当好指挥官的4 梯度下降、反向传播和显卡参考内容 1 基本概念及原理 1.1 基本概念 概念名称 目的 操作 示意图 卷积(Convolution) 提取特征 将图像矩阵遍历乘以卷积核矩阵并输出 池化(Pooling) 降低数据量 对小块矩阵中的所有数取平均(平均池化)或者取最大(最大池化)并只输出一个值,再遍历 激活(Activation) 对

继续访问

卷积神经网络的缺点_辽宁大学的博客_卷积神经网络的优缺点

1.做卷积神经网络需要将数据集归一化。不同的尺寸混合在一起难以训练。2.卷积神经网络没有记忆功能。3.对图像处理很友善,对视频语音自然语言处理能力差...

关于CNN卷积神经网络的问题_麦格芬230的博客

将卷积神经网络CNN应用到文本分类任务,利用多个不同大小的卷积核来提取句子中的关键信息(类似于多窗口大小的N-gram),从而能够更好地捕捉局部相关性。 4.在情感分析任务中,TextCNN的卷积核,卷积的是哪些向量呢?卷积卷的是这些向量的什么...

深入浅出——搞懂卷积神经网络的过拟合、梯度弥散、batchsize的影响的问题(二)

过拟合 梯度弥散 batchsize 不平衡数据集

继续访问

cnn卷积神经网络反向传播,卷积神经网络维度变化

深度学习框架,尤其是基于人工神经网络的框架可以追溯到1980年福岛邦彦提出的新认知机[2],而人工神经网络的历史更为久远。1989年,燕乐存(YannLeCun)等人开始将1974年提出的标准反向传播算法[3]应用于深度神经网络,这一网络被用于手写邮政编码识别。尽管算法可以成功执行,但计算代价非常巨大,神经网路的训练时间达到了3天,因而无法投入实际使用[4]。...

继续访问

卷积神经网络CNN特点功能及其缺陷_一只不出息的程序员的博客...

卷积:简单地说,图像经过平移,相应的特征图上的表达也是平移的。 下图只是一个为了说明这个问题的例子。输入图像的左下角有一个人脸,经过卷积,人脸的特征(眼睛,鼻子)也位于特征图的左下角。 在神经网络中,卷积被定义为不同位置的特征...

记录 训练卷积神经网络时遇到的问题_后知后觉w的博客

记录 训练卷积神经网络时遇到的问题 问题1、softmax分类的loss最后会停在0.6931这个值 原因分析:在分类层使用了keras.layers.Lambda,导致分类器没有可训练的参数,因此没有分类能力,即,无论是否为object,softmax的输出都是0.5,根据loss...

都说卷积神经网络是个好东西,但它有什么弊端呢?

图片来源:Mathworks翻译 | 王赫编辑 | Donna2012年,三位深度学习的“巨人”Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton,联合发表了题为 “ImageNet Classification with Deep Convolutional Networks” 的论文。自此,卷积神经网络( CNNs )就成了一个万人追捧的工具,并

继续访问

卷积神经网络—全连接层

卷积神经网络—全连接层 全连接层 全连接层与卷积层 全连接层与GAP(全局平均池化层) [1] [2] [3] ...

继续访问

五、卷积神经网络CNN5(卷积相关问题2)_满满myno的博客

输出深度(通道)与卷积核(过滤器)的个数相等。 激活函数通常放在卷积神经网络的那个操作之后 通常放在卷积层之后。 如何理解最大池化层有几分缩小 池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面 ...

卷积神经网络的缺点

(1)效果好是因为仿生学,缺点是无法扩展到平面视觉以外的地方吧。 (2)缺点一:实现比较复杂。缺点二:训练所需时间比较久。 (3)不是单一算法,不同的任务需要单独训练 (4)世界(物理空间、解空间等)是连续且局部平坦的+规律/特征具有时空局部平移不变性,即世界存在局部平移不变的统计规律 举个例子:在地球表面某局部画三角形,发现内角和总是等于180,并且随便跑到地球的哪里都是如此,但是如果你

继续访问

神经网络 卷积神经网络,卷积神经网络常见问题

卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。[1] 它包括卷积层(alternatingconvolutionallayer)和池层(poolinglayer)。卷积神经网络是近年发展起来,并引起广泛重视的一种高效识别方法。...

继续访问

卷积神经网络(CNN)入门常见问题解答

目录 什么是神经元? 激活函数的作用? 什么是神经网络? CNN怎么进行识别? 计算机如何识别图像? CNN如何更准确人性化的对比图像? 什么是卷积操作? 感谢作者: CNN笔记:通俗理解卷积神经网络_v_JULY_v的博客-CSDN博客_卷积神经网络通俗理解 什么是神经元? 神经网络由大量的神经元相互连接而成。每个神经元接受线性组合的输入后,最开始只是简单的线性加权,后来给每个神经元加上了非线性的激活函数,从而进行非线性变换后输出。每两个神经元之间的连接代表加权值,称...

继续访问

卷积神经网络——解决参数太多问题

一、全连接网路的局限性 图像变大导致色彩书变多,不好解决 不便处理高维数据 对于比较复杂的高维数据,如果按照全连接的方法,则只能通过增加节点、增加层数的方式来解决。增加节点会引起参数过多的问题。由于隐藏层神经网络使用的是sigmod或tanh激活函数,其反向传播的有效成层数只能在4~6层左右。 二、理解卷积神经网络 三、网络结构 卷积神经网络的结构与全连接网络相比复杂很多。它的网络结构主要包括卷积层、池化层。细节又可以分为滤波器、步长、卷积操作、池化操作。 1.网络结构描述 对于一般的图片会使用多个卷积

继续访问

人工智能深度学习卷积神经网络入门

span style="font-size:16px;""java大数据人工智能培训学校全套教材"系列课程由1000集视频构成,基本就 是1)时下流行的java培训学校主流内部教材,2)和市面上培训学校的通 行的课程体系几乎一样。所以这套课程都能自己学下来,等于上了培训学校一次,完全可以找个java工程师的工作了。/spanbr / br / span style="font-size:14px;"span style="font-size:16px;"  通过学习卷积神经网络概述,为什么引入神经网络来做识别,判断,预测,/spanstrongspan style="font-size:16px;"训练模型/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"激活函数/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"sigmoid激活函数/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"导数和切线/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"sigmoid激活函数如何求导/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"链式法则/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"梯度/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"梯度下降法与delta法则/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"BP(back propagation)误差逆传播神经网络/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"卷积到底有什么作用?如何做到特征提取/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"池化的名字由来/span/strongspan style="font-size:16px;",/spanstrongstrongspan style="font-size:16px;"dropout/span/strong/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"Anaconda Prompt的用法/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"Jupyter notebook的用法/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"Spyder的用法/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"建立安装Tensorflow所需的Anaconda虚拟环境/span/strongspan style="font-size:16px;",/spanstrongspan style="font-size:16px;"如何在Anaconda虚拟环境安装Tensorflow与Keras/span/strongspan style="font-size:16px;"概念等让大家对人工智能,卷积神经网络快速入门。/span/spanbr / br / span style="font-size:16px;"课程特色:专业细致,偏案例,理论强。/spanbr / br / span style="font-size:14px;"span style="font-size:16px;"课程软件使用:/spanspan style="font-size:14px;"strongspan style="font-size:16px;"Anaconda,/spanspan style="font-size:14px;"strongspanspan style="font-size:16px;"Spyder,/spanspan style="font-size:16px;"strongspan style="font-size:16px;"Jupyter notebook/span/strong/span/span/strong/span/strong/span/spanbr / br / span style="font-size:16px;"重要声明:/spanbr / br / span style="font-size:16px;"1) 如果感觉噪音大,可以选择不用耳机,加音箱或用电脑原声 /spanbr / br / span style="font-size:14px;"span style="font-size:16px;"2) 既然我们的名字叫/spanspan style="font-size:16px;"人工智能深度学习卷积神经网络入门/spanspan style="font-size:16px;",这个课程的特点就在于成本最低的, 让你最快速的,最容易的入门。/spanspan style="font-size:16px;"人工智能深度学习卷积神经网络入门/spanspan style="font-size:16px;"的最大的难点在于入门入不了,从而最终放弃。俗话说师傅领进门,修行在个人。只要入了门了,后面的事都好办。选课前,务必注意本章的学习目标和内容。想学更多,注意后边的课程。/span/span

继续访问

python卷积神经网络回归预测_回归[keras]的一维卷积神经网络,做

在上一篇博客里我介绍了如何利用keras对一个给定的数据集来完成多分类任务。100%的分类准确度验证了分类模型的可行性和数据集的准确度。在这篇博客当中我将利用一个稍加修改的数据集来完成线性回归任务。相比较以往的线性回归处理方式,我认为使用神经网络实现线性回归要简单和准确得多。数据集大小仍然是247*900,不同的是数据集的第247位变成了湿度特征的真实湿度值。不同于分类算法得到的决策面,回归算法得...

继续访问

卷积神经网络之全连接层

大多数内容来源于 :卷积神经网络中的全连接层 全连接层的作用是: 连接所有的特征,将输出值送给分类器 (如softmax分类器),其将卷积输出的二维特征图转化成 (N * 1)一维的一个向量。 最后的两列小圆球就是两个全连接层,在最后一层卷积结束后,又进行了一次池化操作,输出了20个 12*12 的图像(20指最后一层的厚度),然后通过了一个全连接层变成了 1*100 的向量(第一个全连接层神...

继续访问

人工神经网络的功能特点,神经网络的优缺点

此时,网络学习了过多的样本细节,而不能反映样本内含的规律由于BP算法本质上为梯度下降法,而它所要优化的目标函数又非常复杂,因此,必然会出现“锯齿形现象”,这使得BP算法低效;多层前向BP网络的问题:从数学角度看,BP算法为一种局部搜索的优化方法,但它要解决的问题为求解复杂非线性函数的全局极值,因此,算法很有可能陷入局部极值,使训练失败;例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能,慢慢学会识别类似的图像。第三,具有高速寻找优化解的能力。...

继续访问

【Keras】卷积神经网络数据回归预测实战

基于卷积神经网络的数据回归预测

继续访问

热门推荐 反向传播算法(过程及公式推导)

反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。

继续访问

深度学习---卷积神经网络解决分类与回归问题

一、CNN神经网络的发展史: Lenet,1986年 Alexnet,2012年 2012年,Imagenet比赛冠军的model——Alexnet [2](以第一作者alex命名),AlexNet 是一种典型的 convolutional neural network,它由5层 convolutional layer,2层 fully connected layer,和最后一层 label layer (1000个node, 每个node代表ImageNet中的一个类别) 组成 GoogleNet

继续访问

深度学习之卷积神经网络CNN详细

计算机视觉、自然语言处理等领域(图像分类、图像分割、图像检测、文本

继续访问

一文让你彻底了解卷积神经网络

目录 卷积层 直观理解卷积 卷积计算流程 计算过程: 思考: 池化层(PoolingLayer) 卷积神经网络的组成 前向传播与反向传播 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出

吴教授的CNN课堂:进阶 | 从LeNet到残差网络(ResNet)和Inception Net

第二周是关于卷积网梁丛络(CNN)进阶部分,学到挺多新东西。因为之前了解过CNN基础后,就大多在用RNN进行自然语言处理方面的研究,很多CNN的最新进展虽有耳闻,但是并不清楚。

特别是各个论文模型又喜欢取一些奇怪的名字(比如昨天读的两篇论文,一个叫NTT,一个叫TMD),如果没读过论文,不了解一些缘由,真是傻傻分不清。

之前看视觉问答时,预处理图片部分需选择训练好的网络,结果一看,一大堆什么 VGG、Res、Incept 这些看不懂的名词,而且后面还加着16、19、101等数字和V1、V2、V3这样的版本数。结果只能两眼一抹黑,参考别人的论文,瞎选了一个。

闲话不多说,开始吧。

在提到之后的ResNet和Inception Net前,最好先回顾一下CNN里面成功架构的发展,这样就可以把握住一条清晰的发展脉络,之后讲解进阶网络的时候也能很快理解。

首先是爷爷级的 LeNet-5 ,因为这大概是20年前提出来的了。是当时尚且青涩,而现在已是深度学习四大天王里的LeCun提出的,LeNet也是取自他名字前半截,5表示只有五层,当时用于处理MNIST这样的手写数字识别。

在基础课里面吴教授也有亲手把整个架构画出来,所以并不是很复杂。分别卷积和池化两次后,然后直接输入全连接网络就可以了。

LeNet后,因为人工智能寒冬,所以很长时间并没有太大发展。

直到13年的时候,后起之秀Alex Krizhevsky (相信不少人也看过他的博客,听过他有名的Stanford cs231) 提出了AlexNet,在ImageNet比赛上取得了很大的成功,向大家展示了深度学习的力量,从此掀起一次浪潮。

AlexNet和LeNet差别并不是很大,主要不同有以下三点。

在AlexNet展示了深度学习在图像处理上的成功后,大家也就开始不断在其之上完善图像处理的CNN构架。而VGG就是第一个 非常简洁又系统化,提出了一套怎么使用更深的网络来训练的网络架构 。

VGG的创举之点在于,比起之前那些网络其中参数的混杂,它很有计划和条理地布置了架构中各个层的结构。比如说可以列举出一下几点:

VGG是当时参赛组(Visual Geometry Group)的名称。一般现在大家用到的都是VGG-16或者VGG-19,16和19也正如所想枯嫌,分别是对应的VGG版本中的层数。

看上去16和19层好像也很多了,但和之后ResNet这样的动不动就101,152层的巨无霸相比,还是小巫见大巫。

那为什么不也增加VGG的层数呢?

这里要提到深层神经网络训练中的一个大问题了,那就是当层数过大时,会产生所谓的 梯度爆炸(Exploding Gradients)和梯度消失(Vanishing Gradients) 现象。

打个比方,如果每次的梯度相乘的系数都是小于1的数,假如说0.6, 那么19 层算下来,0.6的19次方就已经是0.00061了,更别提上百层了。这样传播到最底层的时候,能够 学习到的参数就很小 了,这就是梯度消失。

反过来,梯度爆炸的情况,如果系数大于1,多次累乘后就橡败樱会得到一个很大的数,也会造成不好的结果。有点像是复利的概念,也就是那个和国王打赌要一棋盘稻子的故事。

梯度爆炸还好解决,可以用 梯度修剪(Gradient Clipping) 修剪一下就好了。而梯度消失就有点难解决了。

因为这样的问题,所以虽然理论上普通的深处网络是越深学的越好,但是实际上却事与愿违。下图横轴是网络层数,竖轴是训练误差(越小越好)。 理论上随着层数增加,误差就减小,但是实际是过了某个点之后,误差反而会增大。

那么ResNet是怎么训练到上百层的呢,难道它就不怕上面的问题吗?

它用一个很简单的方法解决了上面的问题。

有很多很棒的论文,没读之前,看名字觉得很厉害的。但结果一看论文,才发现方法非常之简洁,特别是有一些利用数学知识推导出的简单解决方法,让人不得不一边拍手称赞,一边感叹自己数学渣。

ResNet也是这样子的,看名字很酷炫,但是打开论文一看,才发现原来是这样啊。

ResNet的最主要就是 Shortcut(捷径) 这个概念。来看看这到底是什么吧,首先假设我们从一个神经网络中取出两层,当做是一个块(block),先不管中间是MLP或者是CNN。

而shortcut就如下图一样,从第一层的输入直接建立一条捷径到第二层的输出,激活函数前。

也就是说第二层激活后的输出可以会发生这样的变化。

变成

这样子处理之后,我们得到的这一小块就叫做 Residual Block(残差块) ,而把这些块堆叠起来就是我们的残差网络了。很简单吧,像下面这样,一个34层的残差网络。

这样子我们就得到残差网络,那么实际上训练会怎么样呢。

正是我们想要的模型,也非常符合理论。

最后再提一下残差网络背后的原理,为什么这样简单改一下就能够有这么好的表现呢。

原因是捷径的建立,使得每一个残差块可以 很容易地学习到恒等函数 ,也就是f(x)=x。也就是说加入残差块之后,再差也能学会恒等函数,保留信息,把之前的结果直接这样传下去,所以也就不用担心之前提到的 梯度消失 问题了。

介绍Inception网络前,先介绍一下其中一个很重要的概念1x1卷积。

初看1x1卷积的概念会觉得很奇怪,这样子每次对一个像素进行卷积有什么用,我们本来不就是想检测局部的特征吗。但是如果理解了 通道 概念的话,就能很好理解了。

因为,如果说普通的 大窗口卷积更注重一个通道内各个特征的互动 的话,那么1x1卷积就是只在通道与通道进行卷积运算,加强了通道之间的互动。

这就是第一点, 加强了通道与通道之间的交流 。用这个就可以只对通道进行一些操作,如用1x1卷积增加通道数,减少通道数,也可以不增不减,但是对之前的通道进行整理。

1x1卷积网络还有一个好处,那就是 通过合理运用可以减少整体网络的运算量 。

还是来举例子吧,假设有以下一个卷积过程。

那么上面这个过程所需要的运算量大约一亿两千万次。

而如果我们巧妙地利用1x1卷积来对通道进行合理处理的话,像下面这样。

运算量会变得只有大概一千二百万左右,一下子就缩小了十倍。

有了上面的知识以后,一切就简单多了。Inception网络的核心概念是,既然在选择CNN架构的时候要为了过滤器的窗口大小考虑半天,那么 何不把各个尺寸都用上去,最后再把结果接起来就好了呢 。

于是就有了下面这样的 Inception模块 。有用1x1、3x3、5x5各个尺寸的卷积,而且还用到之前讲到的利用1x1卷积减少运算量的技巧。

最后至于整个Inception网络,就像之前残差网络一样,把 Inception模块 堆叠起来就好了。

当然论文中还有一些次要细节,这里就不多说了。

而且自最初的论文之后,Inception网络也有很多改进,加入了很多技巧,比如之前的残差网络中的技巧。所以现在网上的Inception网络,后面会有V1、V2、V3之类后缀,表示的就是各个版本。

最后,作为余谈,说说为什么Inception网络要叫做 Inception 网络。

因为在这篇正经的学术论文里面,作者引用了一个链接,点开后会出现这张图片。

卷积神经网络结构——LeNet-5(卷积神经网络入门,Keras代码实现)

要粗滚深入理解卷积神经网络的结构,我们需要追根溯源,只有这样才能更好的理解 CNN 网络。

1998年 LeCun 和 Bengio 等人利用 LeNet-5 网络在手写体数字识别领域上的识别效果超过了传统方法,从此开启了卷积神经网络的在图像上的应用大差凳哗门。据说,一开始美国银行的手写体数字识别就是用的这个算法。

Gradient -Based Learing Applied to Document Recognition

论文有点长,46页,估计很难读下虚行来。

LeCun 做了一些网页展示,有兴趣可以去浏览。

上图是 LeCun 原论文中 LeNet-5 的结构图。

GoogLeNet

Inception V1(也称为GoogLeNet,命名致敬Google和LeNet),是2014年由Christian Szegedy提出的一种全新的深度神经网络,该网络结构获得2014年ImageNet大赛的冠军。前面两篇文章介绍了AlexNet和拿皮正VGGNet,这两种网络结构都是通过增大网络的深度来获得更好的效果,但是深度的加深会带来一些副作用,比如过拟合、梯度消失、计算太复杂等,Inception提供了另外一种思路,增强卷积握好模块功能,可以在增加网络深度和宽度的同时减少参数。

解消悔释图1

解释图2

NIN(网络中的网络)

        LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。

NiN块

        卷积层的输入和输出通常是四维数组(样本,通道,高,宽),而全连接层的输入和输出则通常是二维数组(样本,特征)。如果想在全连接层后再接上卷积层,则需要将全连接层的输出变皮旦雀换为四维。1×1卷积层可以看成全连接层,其中空间维度(高和宽)上的每个元素相当于样本,通道相当于特征。因此,NiN使用1×1卷积层来替代全连接层,从而使空间信息能够自然传递到后面的层中去。下图对比了NiN同AlexNet和VGG等网络在结构上的主要区别。

NiN模型

        NiN是在AlexNet问世不久后提出的。它们的卷积层设定有类似之处。NiN使用卷积窗口形状分别为11×11、5×5和3×3的卷积层,相应的输出通道数也与AlexNet中的一致。每个NiN块后接一个步幅为2、窗口形状为3×3的最大池化层。

        除使用NiN块以外,NiN还有一个设计与AlexNet显著不同: NiN去掉了AlexNet最后的3个全连接层,取而代之地,NiN使用了输出通道数等于标签类别数的NiN块,然后使用全局平均池化层对每个通道中所有元素求平均并直接用于分类。这里的全局平均池化层即窗口形状等于燃早输入空间维形状的平均池化层。NiN的这个设计的好处是可以显著减小模型参数尺寸,从而缓解过拟合。然而,该设计有时会造成获得有迟吵效模型的训练时间的增加。

小结

NiN重复使用由卷积层和代替全连接层的1×1卷积层构成的NiN块来构建深层网络。

NiN去除了容易造成过拟合的全连接输出层,而是将其替换成输出通道数等于标签类别数的NiN块和全局平均池化层。

NiN的以上设计思想影响了后面一系列卷积神经网络的设计。

原文地址:

CNN之Lenet5

LeNet诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。

LeNet-5是Yann LeCun等人在多次研究后提出的最终卷积神经网络结构,主要用于手写数字识别

LeNet5的网络结构如下所示:

LeNet-5包含七层,不包括输入,每一层都包含可训练参数(权重),当时使用的输入数据是32*32像素的图像。下面逐层介绍LeNet-5的结构,并且,卷积层将用Cx表示,子采样层则被标记为Sx,全连接层被标记为Fx,其袜袭中x是层索引。

该层使用了6个卷积核,每个卷积核的大小为5×5,这样就得到了6个feature map(特征图)。

每个卷积核(5×5)与原始的输入图像(32×32)进行卷积,这样得到的feature map(特征图)大小为(32-5+1)×(32-5+1)= 28×28

卷积核与输入图像按卷积核大小逐个区域进行匹配计算,匹配后原始输入图像的尺寸将变小,因为边缘部分卷积核无法越出界,只能匹配一次,匹配计算后的尺寸变为Cr×Cc=(Ir-Kr+1)×(Ic-Kc+1),其中Cr、Cc,Ir、Ic,Kr、Kc分别表示卷积后结果图像、输入图像、卷积核的行列大小。

由于参数(权值)共享的原因,对于同个卷积核每个神经元均使用相同的参数,因此,参数个数为(5×5+1)×6= 156,其中5×5为卷积核参数,1为偏置参数

卷积后的图像大小为28×28,因此每个特征图有28×28个神经元,每个卷积核参数为(5×5+1)×6,因此,该层的连接数为(5×5+1)×6×28×28=122304

这一层主要是做池化或者特征映射(特征降维),池化单元为2×2,因此,6个特征图的大小经池化后即变为14×14。池化单元之间没有重叠,在池化区域内进行聚合统计后得到新的特征值,因此经2×2池化后,每两行两列重新算出一个特征值出来,相当于图像大小减半,因此卷积后的28×28图像经2×2池化后就变为14×14。

这一层的计算过程是:2×2 单元里的值相加,然后再乘以训练参数w,再加上一个偏置参数b(每一个特征图共享相同的w和b),然后取sigmoid值(S函数:0-1区间),作为对应的该单元的值。卷积操作与池化的示意图如下:

S2层由于每个特征图都共享相同的w和b这两个参数,因此需要2×6=12个参数

下采样之后的图像大小为14×14,因此S2层的每个特征图有14×14个神经元,每个池化单元连接数为2×2+1(1为偏置量),因此,该层的连接数为(2×2+1)×14×14×6 = 5880

C3层有16个卷积核,卷积模板大小为5×5。

与C1层的分析类似,C3层的特征图大小为(14-5+1)×(14-5+1)= 10×10

需要注意的是,C3与S2并不是全连接而是部分连接,有些是C3连接到S2三层、有些四层、甚至达到6层,通过这种方式提取更多特征,连接的规则如下表所示:

例如第一列表示C3层的第0个特征图(feature map)只跟S2层的第0、1和2这三个feature maps相连接,计算过程为:用3个卷积模板分别与S2层的3个feature maps进行卷积,然后将卷积的结果相加求和,再加上一个偏置,再取sigmoid得出卷积后对应的feature map了。其它列也是类似(有些是3个卷积模板,有些是4个,有些是6个)。因此,C3层的参数数目为(5×5×3+1)×6 +(5×5×4+1)×9 +5×5×6+1 = 1516

卷积后的特征图大小为10×10,参数数量为1516,因此连接数为1516×10×10= 151600

与S2的分析类似,池化单元大小为2×2,因此,该层与C3一样共有16个特征图,每个特征图的大小为5×5。

与S2的计算类似,所需要参数个数为16×2 = 32

连接数为(2×2+1)×5×5×16 = 2000

该层有120个卷积核,每个卷积核的悉好坦大小仍为5×5,因此有120个特征图。由于S4层的大小睁桐为5×5,而该层的卷积核大小也是5×5,因此特征图大小为(5-5+1)×(5-5+1)= 1×1。这样该层就刚好变成了全连接,这只是巧合,如果原始输入的图像比较大,则该层就不是全连接了。

与前面的分析类似,本层的参数数目为120×(5×5×16+1) = 48120

由于该层的特征图大小刚好为1×1,因此连接数为48120×1×1=48120

F6层有84个单元,之所以选这个数字的原因是来自于输出层的设计,对应于一个7×12的比特图,如下图所示,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。

该层有84个特征图,特征图大小与C5一样都是1×1,与C5层全连接。

由于是全连接,参数数量为(120+1)×84=10164。跟经典神经网络一样,F6层计算输入向量和权重向量之间的点积,再加上一个偏置,然后将其传递给sigmoid函数得出结果。

由于是全连接,连接数与参数数量一样,也是10164。

Output层也是全连接层,共有10个节点,分别代表数字0到9。如果第i个节点的值为0,则表示网络识别的结果是数字i。

该层采用径向基函数(RBF)的网络连接方式,假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:

上式中的Wij的值由i的比特图编码确定,i从0到9,j取值从0到7×12-1。RBF输出的值越接近于0,表示当前网络输入的识别结果与字符i越接近。

由于是全连接,参数个数为84×10=840

由于是全连接,连接数与参数个数一样,也是840

from skimage import io,transform

import os

import glob

import numpy as np

import tensorflow as tf

#将所有的图片重新设置尺寸为32*32

w = 32

h = 32

c = 1

#mnist数据集中训练数据和测试数据保存地址

train_path = "E:/data/datasets/mnist/train/"

test_path = "E:/data/datasets/mnist/test/"

#读取图片及其标签函数

'''os.listdir()返回指定的文件夹包含的文件或文件夹的名字,存放于一个列表中;os.path.isdir()判断某一路径是否为目录

enumerate()将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,数据下标和相应数据'''

def read_image(path):

    label_dir = [path+x for x in os.listdir(path) if os.path.isdir(path+x)]

    images = []

    labels = []

    for index,folder in enumerate(label_dir):

        for img in glob.glob(folder+'/*.png'):

            print("reading the image:%s"%img)

            image = io.imread(img)

            image = transform.resize(image,(w,h,c))

            images.append(image)

            labels.append(index)

    return np.asarray(images,dtype=np.float32),np.asarray(labels,dtype=np.int32)

#读取训练数据及测试数据           

train_data,train_label = read_image(train_path)

test_data,test_label = read_image(test_path)

#打乱训练数据及测试数据  np.arange()返回一个有终点和起点的固定步长的排列,

train_image_num = len(train_data)

train_image_index = np.arange(train_image_num) ##起始点0,结束点train_image_num,步长1,返回类型array,一维

np.random.shuffle(train_image_index)

train_data = train_data[train_image_index]

train_label = train_label[train_image_index]

test_image_num = len(test_data)

test_image_index = np.arange(test_image_num)

np.random.shuffle(test_image_index)

test_data = test_data[test_image_index]

test_label = test_label[test_image_index]

#搭建CNN 此函数可以理解为形参,用于定义过程,在执行的时候再赋具体的值,形参名X,y_

x = tf.placeholder(tf.float32,[None,w,h,c],name='x')

y_ = tf.placeholder(tf.int32,[None],name='y_')

def inference(input_tensor,train,regularizer):

    #第一层:卷积层,过滤器的尺寸为5×5,深度为6,不使用全0补充,步长为1。

    #尺寸变化:32×32×1-28×28×6

    '''参数的初始化:tf.truncated_normal_initializer()或者简写为tf.TruncatedNormal()、tf.RandomNormal() 去掉_initializer,大写首字母即可

生成截断正态分布的随机数,这个初始化方法好像在tf中用得比较多mean=0.0, stddev=1.0 正态分布

'''

    with tf.variable_scope('layer1-conv1'):

        conv1_weights = tf.get_variable('weight',[5,5,c,6],initializer=tf.truncated_normal_initializer(stddev=0.1))

        conv1_biases = tf.get_variable('bias',[6],initializer=tf.constant_initializer(0.0))

        conv1 = tf.nn.conv2d(input_tensor,conv1_weights,strides=[1,1,1,1],padding='VALID')

        relu1 = tf.nn.relu(tf.nn.bias_add(conv1,conv1_biases))

    #第二层:池化层,过滤器的尺寸为2×2,使用全0补充,步长为2。

    #尺寸变化:28×28×6-14×14×6

    with tf.name_scope('layer2-pool1'):

        pool1 = tf.nn.max_pool(relu1,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

    #第三层:卷积层,过滤器的尺寸为5×5,深度为16,不使用全0补充,步长为1。

    #尺寸变化:14×14×6-10×10×16

    with tf.variable_scope('layer3-conv2'):

        conv2_weights = tf.get_variable('weight',[5,5,6,16],initializer=tf.truncated_normal_initializer(stddev=0.1))

        conv2_biases = tf.get_variable('bias',[16],initializer=tf.constant_initializer(0.0))

        conv2 = tf.nn.conv2d(pool1,conv2_weights,strides=[1,1,1,1],padding='VALID')

        relu2 = tf.nn.relu(tf.nn.bias_add(conv2,conv2_biases))

    #第四层:池化层,过滤器的尺寸为2×2,使用全0补充,步长为2。

    #尺寸变化:10×10×6-5×5×16

    with tf.variable_scope('layer4-pool2'):

        pool2 = tf.nn.max_pool(relu2,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

    #将第四层池化层的输出转化为第五层全连接层的输入格式。第四层的输出为5×5×16的矩阵,然而第五层全连接层需要的输入格式

    #为向量,所以我们需要把代表每张图片的尺寸为5×5×16的矩阵拉直成一个长度为5×5×16的向量。

    #举例说,每次训练64张图片,那么第四层池化层的输出的size为(64,5,5,16),拉直为向量,nodes=5×5×16=400,尺寸size变为(64,400)

    pool_shape = pool2.get_shape().as_list()

    nodes = pool_shape[1]*pool_shape[2]*pool_shape[3]

    reshaped = tf.reshape(pool2,[-1,nodes])

    #第五层:全连接层,nodes=5×5×16=400,400-120的全连接

    #尺寸变化:比如一组训练样本为64,那么尺寸变化为64×400-64×120

    #训练时,引入dropout,dropout在训练时会随机将部分节点的输出改为0,dropout可以避免过拟合问题。

    #这和模型越简单越不容易过拟合思想一致,和正则化限制权重的大小,使得模型不能任意拟合训练数据中的随机噪声,以此达到避免过拟合思想一致。

    #本文最后训练时没有采用dropout,dropout项传入参数设置成了False,因为训练和测试写在了一起没有分离,不过大家可以尝试。

    '''tf.matmul()这个函数是专门矩阵或者tensor乘法,而不是矩阵元素对应元素相乘

    tf.multiply()两个矩阵中对应元素各自相乘

    tf.nn.dropout(x, keep_prob):TensorFlow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层,

    x:指输入;keep_prob: 设置神经元被选中的概率,使输入tensor中某些元素变为0,其它没变0的元素变为原来的1/keep_prob大小,可以想象下,比如某些元素弃用

    在初始化时keep_prob是一个占位符,keep_prob = tf.placeholder(tf.float32).

    tensorflow在run时设置keep_prob具体的值,例如keep_prob: 0.5,train的时候才是dropout起作用的时候

    keep_prob: A scalar Tensor with the same type as x. The probability that each element is kept.'''

    with tf.variable_scope('layer5-fc1'):

        fc1_weights = tf.get_variable('weight',[nodes,120],initializer=tf.truncated_normal_initializer(stddev=0.1))

        if regularizer != None:

            tf.add_to_collection('losses',regularizer(fc1_weights))

        fc1_biases = tf.get_variable('bias',[120],initializer=tf.constant_initializer(0.1))

        fc1 = tf.nn.relu(tf.matmul(reshaped,fc1_weights) + fc1_biases)

        if train:

            fc1 = tf.nn.dropout(fc1,0.5)

    #第六层:全连接层,120-84的全连接

    #尺寸变化:比如一组训练样本为64,那么尺寸变化为64×120-64×84

    '''tf.add_to_collection:把变量放入一个集合,把很多变量变成一个列表

    tf.get_collection:从一个结合中取出全部变量,是一个列表

    tf.add_n:把一个列表的东西都依次加起来'''

    with tf.variable_scope('layer6-fc2'):

        fc2_weights = tf.get_variable('weight',[120,84],initializer=tf.truncated_normal_initializer(stddev=0.1))

        if regularizer != None:

            tf.add_to_collection('losses',regularizer(fc2_weights))

        fc2_biases = tf.get_variable('bias',[84],initializer=tf.truncated_normal_initializer(stddev=0.1))

        fc2 = tf.nn.relu(tf.matmul(fc1,fc2_weights) + fc2_biases)

        if train:

            fc2 = tf.nn.dropout(fc2,0.5)

    #第七层:全连接层(近似表示),84-10的全连接

    #尺寸变化:比如一组训练样本为64,那么尺寸变化为64×84-64×10。最后,64×10的矩阵经过softmax之后就得出了64张图片分类于每种数字的概率,

    #即得到最后的分类结果。

    with tf.variable_scope('layer7-fc3'):

        fc3_weights = tf.get_variable('weight',[84,10],initializer=tf.truncated_normal_initializer(stddev=0.1))

        if regularizer != None:

            tf.add_to_collection('losses',regularizer(fc3_weights))

        fc3_biases = tf.get_variable('bias',[10],initializer=tf.truncated_normal_initializer(stddev=0.1))

        logit = tf.matmul(fc2,fc3_weights) + fc3_biases

    return logit

#正则化,交叉熵,平均交叉熵,损失函数,最小化损失函数,预测和实际equal比较,tf.equal函数会得到True或False,

#accuracy首先将tf.equal比较得到的布尔值转为float型,即True转为1.,False转为0,最后求平均值,即一组样本的正确率。

#比如:一组5个样本,tf.equal比较为[True False True False False],转化为float型为[1. 0 1. 0 0],准确率为2./5=40%。

'''规则化可以帮助防止过度配合,提高模型的适用性。(让模型无法完美匹配所有的训练项。)(使用规则来使用尽量少的变量去拟合数据)

规则化就是说给需要训练的目标函数加上一些规则(限制),让他们不要自我膨胀。

TensorFlow会将L2的正则化损失值除以2使得求导得到的结果更加简洁

如tf.contrib.layers.apply_regularization/l1_regularizer/l2_regularizer/sum_regularizer

sparse_softmax_cross_entropy_with_logits()是将softmax和cross_entropy放在一起计算

'''

regularizer = tf.contrib.layers.l2_regularizer(0.001)

y = inference(x,False,regularizer)

cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=y_)

cross_entropy_mean = tf.reduce_mean(cross_entropy)

loss = cross_entropy_mean + tf.add_n(tf.get_collection('losses'))

train_op = tf.train.AdamOptimizer(0.001).minimize(loss)

correct_prediction = tf.equal(tf.cast(tf.argmax(y,1),tf.int32),y_)

accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

#每次获取batch_size个样本进行训练或测试

def get_batch(data,label,batch_size):

    for start_index in range(0,len(data)-batch_size+1,batch_size):

        slice_index = slice(start_index,start_index+batch_size)

        yield data[slice_index],label[slice_index]

#创建Session会话

with tf.Session() as sess:

    #初始化所有变量(权值,偏置等)

    sess.run(tf.global_variables_initializer())

    #将所有样本训练10次,每次训练中以64个为一组训练完所有样本。

    #train_num可以设置大一些。

    train_num = 10

    batch_size = 64

    for i in range(train_num):

        train_loss,train_acc,batch_num = 0, 0, 0

        for train_data_batch,train_label_batch in get_batch(train_data,train_label,batch_size):

            _,err,acc = sess.run([train_op,loss,accuracy],feed_dict={x:train_data_batch,y_:train_label_batch})

            train_loss+=err;train_acc+=acc;batch_num+=1

        print("train loss:",train_loss/batch_num)

        print("train acc:",train_acc/batch_num)

        test_loss,test_acc,batch_num = 0, 0, 0

        for test_data_batch,test_label_batch in get_batch(test_data,test_label,batch_size):

            err,acc = sess.run([loss,accuracy],feed_dict={x:test_data_batch,y_:test_label_batch})

            test_loss+=err;test_acc+=acc;batch_num+=1

        print("test loss:",test_loss/batch_num)

        print("test acc:",test_acc/batch_num)

综上就是 baike.aiufida.com 小编关于lenet是谁发明的的知识的个人见解,如果能够提供给您解决问题时的帮助,您可以在评论区留言点赞哟。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文