caffe学习

本文深入解析了AlexNet、VGGNet、InceptionNet及ResNet等经典卷积神经网络架构的特点与创新之处,如ReLU、Dropout的应用,Inception模块的设计理念及ResNet解决梯度退化问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AlexNet

AlexNet首次在CNN中成功应用了ReLU、Dropout和LRN等Trick,AlexNet包含了几个新的技术点如下: 
①成功使用ReLU作为CNN的激活函数,验证其在深层网络上超过sigmoid函数,成功解决了sigmoid在网路较深时的梯度弥散问题。 
②训练时采用dropout随机忽略一部分神经元,以避免过拟合。在AlexNet里面将最后几个全连接层使用了dropout。 
③在CNN中使用重叠的最大池化层。此前CNN一般使用平均池化,AlexNet避免了平均池化带来的模糊效果,并且提出了让步长比池化尺寸小,这样池化的输出之间会有覆盖和重叠,提升了特征的丰富性。 
④提出了LRN层,对局部神经元的活动创建竞争机制,使得响应较大的值变得相对更大,并抑制其他反馈小的神经元,增强了模型泛化能力。 
⑤使用CUDA加速深度网路的训练,利用GPU强大的计算能力,处理神经网络训练时大量的矩阵运算。 
⑥数据增强,随机从256*256的原始图像中截取224*224大小的区域(以及水平翻转的镜像),相当于增加了(256-224)^2*2=2048倍的数据量。减轻过拟合,增强泛化能力。进行预测时,取图片的四个角和中间并进行左右翻转,总共获取10张图片进行识别,最后对十次结果求平均值。同时,AlexNet提到对rgb图像进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,这个trick可以下降1%错误率。 

VGGNet

VGGNet中:

(1)LRN层作用不大;

(2)越深的网络效果越好;

(3)1*1的卷积也是有效的,但是没有3*3的卷积好,大一些的卷积核可以学习更大的特征。

Google Inception Net
(1)Inception V1 
获得2014年ILSVRC比赛分类项目的冠军,top-5错误率6.7%,22层神经网络。与VGGNet同年出现,以较大优势赢得第一名,Inception V1有22层,比alexnet的8层或者vggnet的19层深,但是计算量只有15亿次浮点运算,同时只有500万参数量,仅为alexnet(6000万)的1/12,却可以达到远剩余alexnet的准确率,非常优秀且实用的。Inception V1降低参数量的目的有两点: 
①参数越多,模型越庞大,需要提供的数据就越多 
②参数越多,耗费的计算资源就越大 
Inception V1参数少但是效果好的原因除了模型层数更深、表达能力更强外,还有两点原因: 
①去除了最后的全连接层,用全局平均池化层(即将图片尺寸变为1*1)来取代它。全连接层几乎是占据了alexnet和vggnet的90%的参数量,而且会引起过拟合,去除全连接层可以使模型训练加快,并且减轻了过拟合。用全局平均池化来取代全连接的做法借鉴了network in network论文。 
②Inception V1精心设计的Inception model提高了参数利用率,这一部分也借鉴了network in network的思想,Inception model类似一个大网络中的小网络,其结构可以反复堆叠在一起形成大网络。不过Inception V1比NIN更增加了分支网络,NIN主要是级联的卷积层和MLPConv层。一般来说,卷积层要提升表达能力的方法就是增加输出通道数,副作用就是计算量增大和过拟合现象。每一个输出通道对应一个滤波器,共享参数,只能提取一类特征,而NIN的MLPConv则允许输出通道之间组合信息,MLPConv等同于普通卷积再连接一个1*1的卷积和ReLU激活函数。
 

inception moudle共四个分支,四个分支都用到了1*1,来进行低成本跨通道组织信息: 
①第一个分支采用了1*1的卷积,这也是NIN提出的一个重要结构。1*1的卷积是一个非常好的结构,它可以跨通道组织信息,提高网络的表达能力,同时可以对输出通道升维和降维。 
②第二个分支先使用了1*1卷积,然后连接3*3卷积,相当于进行了两次特征变换。 
③第三个分支类似,先是1*1卷积,然后连接5*5卷积。 
④第四个分支先是一个3*3最大池化,1*1卷积。 
inception moudle的4个分支在最后通过聚合操作合并(在输出通道数这个维度上聚合),包含了3种不同尺寸的卷积和1个最大池化,增加网络对不同尺度的适应性,这一部分和multi-scale的思想类似。 
人的神经元的连接是稀疏的,稀疏结构是非常适合神经网络的结构,尤其是对非常大型、非常深的神经网络,可以减轻过拟合并降低计算量,例如卷积神经网络就是稀疏的连接。inception net的主要目标就是找到最优的稀疏结构单元(inception module),论文中提到其稀疏结构基于hebbian原理。 
hebbian原理:神经反射活动的池化与重复会导致神经元连接稳定性的持久性,当两个A和B距离很近,并且A参与了对B重复、持续的兴奋,那么某些代谢变化会导致A将作为能使B兴奋的细胞。总结一下即‘一起发射的神经元会在一起’,学习过程中的刺激会使神经元间的突触强度强度增加。 
在整个网络中,会有多个堆叠的inception module,我们希望靠后的inception module可以捕捉到更高阶的抽象特征,因此靠后的inception module的卷积的空间集中度应该逐渐降低,这样可以捕捉到更大面积的特征。因此,越靠后的inception module中,3*3和5*5这两个大面积的卷积核的占比(输出通道)应该更多。 
(3)Google Inception Net家族 
①2014.9的论文 going deeper with convolutions提出了Inception V1,top-5错误率6.67%。 
②2015.2的论文 batch normalization:accelerating deep network training by reducing internal covariate提出了Inception V2,top-5错误率4.8%。 
③2015.12的论文 rethinking the inception architecture for computer vision提出的Inception V3,top-5错误率3.5%。 
④2016.2的论文 inception-v4,inception-resnet and the impact of residual connections on learning 提出的Inception V4,top-5错误率3.08%。 
(4)Inception V2 
Inception V2 
学习了VGGNet,用两个3*3的卷积代替5*5的大卷积,用来降低参数量和减轻过拟合,还提出了batch normalization(BN)。BN是一个有效的正则化方法,可以让大型卷积网络的训练速度加快多倍,同时收敛后的分类正确率也可以提高很多。BN用于神经网络的某层时,会对每一个mini-batch数据的内部进行(normalization)标准化处理,使输出规范到N(0,1)的正态分布,减少了internal covariate shift(内部神经元分布的改变)。BN的论文指出,传统的深度网络在训练时,每一层的输入的分布都在变化,导致训练变得困难,我们只能使用一个很小的学习率解决这个问题。而对于每一层使用BN之后,可有效解决这个问题,学习速率可以增加很多倍,达到之前的准确率的迭代次数只有1/14.训练时间缩短,然后继续训练,达到更高准确率。因为BN某种意义上起到了正则化作用,故可减少或者取消dropout,简化网络结构。同时可去除LRN,彻底对训练样本进行shuffle,减少数据增强过程中对数据的光学畸变。
(5)Inception V3
Inception V3的改进主要有两方面: 
①引入了factorization into small convolutions的思想,将一个较大的二维卷积拆分成两个较小的以为卷积,比如将7*7拆分成1*7和7*1卷积,一方面节约参数,加速运算,减少过拟合,同时增加了一层非线性扩展模型表达能力,这种非对称拆分比拆分成几个相同的卷积效果更明显,可以获得更多更丰富的空间特征,增加特征多样性。 
②Inception V3又花了inception module结构,现在inception module有35*35、17*17和8*8三种不同结构,这些只在网络的后部分出现,前部还是普通的卷积层。Inception V3不仅在inception module中使用分支,还在分支中使用分支(8*8结构中),可以说是network in network in network。

(4)inception V4 
相比V3结合了为微软的ResNet,在下一篇文章将主要讲解ResNet。

ResNet
ResNet(residual neural network)由获得2015年ILSVRC比赛分类项目的冠军,top-5错误率3.57%,152层神经网络,参数量比vggnet低,效果非常突出。ResNet的结构可以极快的加速超深神经网络的训练,模型的准确率也有非常大的提升。 
在resnet之前,瑞士教授schmidhuber提出了highway network,原理与resnet类似,并且在1977年发明了lstm网络。highway network的目标就是解决极深的神经网络难以训练的问题,相当于修改了每一层的激活函数,此前的激活函数只对输入做一个非线性变换,而highway network则允许保留一定比例的原始输入x,这样前一层的信息有一定比例可以不经过矩阵乘法和非线性变换,直接传到下一层。 
ResNet和highway net很相似,也是允许原始输入信息直接传到后层。ResNet的灵感来自于:在不断加深网络深度的同时,会出现degradation(梯度退化)的问题,即 准确率先上升然后达到饱和,再持续增加深度则会导致准确率下降,这不是过拟合,训练集和测试集的误差都会增大。如果由几个浅的网络达到了饱和,那么增加几个y=x的全映射层至少不会增加误差,即更深的网络不应该带来训练集上的误差,这里将前一层输出传到后面的思想,就是ResNet的灵感来源。 
假定某段神经网络的输入时x,期望输出是h(x),如果我们直接把x传到输出作为初始结果,那么此刻我们需要学习的目标就是f(x)=h(x)-x,这就是一个ResNet的残差学习单元(residual unit),即ResNet的学习目标就变成了输出和输入的差别h(x)-x,即残差。

 普通直连的卷积神经网络与resnet的差别就是resnet有很多旁路的支线将输入直接连到后面的层,通过直接将输入信息绕道传到输出,保护了信息的完整性,只学习输入和输出差别那一部分,简化了学习目标和难度。


《餐馆点餐管理系统——基于Java和MySQL的课程设计解析》 在信息技术日益发达的今天,餐饮行业的数字化管理已经成为一种趋势。本次课程设计的主题是“餐馆点餐管理系统”,它结合了编程语言Java和数据库管理系统MySQL,旨在帮助初学者理解如何构建一个实际的、具有基本功能的餐饮管理软件。下面,我们将深入探讨这个系统的实现细节及其所涉及的关键知识点。 我们要关注的是数据库设计。在“res_db.sql”文件中,我们可以看到数据库的结构,可能包括菜品表、订单表、顾客信息表等。在MySQL中,我们需要创建这些表格并定义相应的字段,如菜品ID、名称、价格、库存等。此外,还要设置主键、外键来保证数据的一致性和完整性。例如,菜品ID作为主键,确保每个菜品的唯一性;订单表中的顾客ID和菜品ID则作为外键,与顾客信息表和菜品表关联,形成数据间的联系。 接下来,我们来看Java部分。在这个系统中,Java主要负责前端界面的展示和后端逻辑的处理。使用Java Swing或JavaFX库可以创建用户友好的图形用户界面(GUI),让顾客能够方便地浏览菜单、下单。同时,Java还负责与MySQL数据库进行交互,通过JDBC(Java Database Connectivity)API实现数据的增删查改操作。在程序中,我们需要编写SQL语句,比如INSERT用于添加新的菜品信息,SELECT用于查询所有菜品,UPDATE用于更新菜品的价格,DELETE用于删除不再提供的菜品。 在系统设计中,我们还需要考虑一些关键功能的实现。例如,“新增菜品和价格”的功能,需要用户输入菜品信息,然后通过Java程序将这些信息存储到数据库中。在显示所有菜品的功能上,程序需要从数据库获取所有菜品数据,然后在界面上动态生成列表或者表格展示。同时,为了提高用户体验,可能还需要实现搜索和排序功能,允许用户根据菜品名称或价格进行筛选。 另外,安全性也是系统设计的重要一环。在连接数据库时,要避免SQL注入攻击,可以通过预编译的PreparedStatement对象来执行SQL命令。对于用户输入的数据,需要进行验证和过滤,防止非法字符和异常值。 这个“餐馆点餐管理系统”项目涵盖了Java编程、数据库设计与管理、用户界面设计等多个方面,是一个很好的学习实践平台。通过这个项目,初学者不仅可以提升编程技能,还能对数据库管理和软件工程有更深入的理解。在实际开发过程中,还会遇到调试、测试、优化等挑战,这些都是成长为专业开发者不可或缺的经验积累
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值