跪求大牛指点一下!关于java大牛中的float与long的取值范围?

摘要:之前介绍了基于前向反馈嘚BP神经网络了解了神经网络模型的工作原理,以及损失函数、分类器、优化方法等基本概念由于BP神经网络具有其局限性,如泛化能力弱难以处理数据量大的数据。本文旨在介绍基于卷积神经网络的分类器目标分类的任务是识别图片中是什么物体,并给出其对应的置信度卷积神经网络与传统的BP神经网络最大的不同是其采用卷积核来做特征提取,这能极大的减少计算量从而有效提高运算效率。此外卷积目标分类网络是我们后面将介绍的目标检测网络的基础,而卷积神经网络的出现才真正将神经网络技术应用于人们生活的方方面面

传统的神经网络算法以及卷积神经网络算法都是针对图像分类而提出的解决方案,目标检测算法我们后面会提到先从目标分类网络讲起。所谓目标分类就是对给定一张图片,通过特定的算法得出该图片的类别常用的方法有利用图像的HoG、SIFT特征结合SVM分类器等算法,传统嘚BP神经网络算法以及我们现在提到的卷积神经网络算法等从2007年Alex大神首次将卷积神经网络用于ImageNet分类比赛以来,卷积神经网络就替代了经典嘚基于图像特征的分类方法大大提高了图像分类的正确率,2016年的GoogleNet神经网络模型可以在ImageNet数据集上达到6.7%的误分类率在2017年,38个竞争团队中有29个錯误率低于5%,可以说正是卷积神经网络的出现将人工智能带出了寒冬。

1.1 卷积神经网络原理

Network,CNN)是近年来应用最为广泛的深度学习的神经网絡结构它与传统的BP神经网络相比,最大的一个显著特征就是能有效的降低网络结构的参数量同时能够更有效地提取图像特征。早在20世紀60年代就有学者将卷积模型应用到工业电路的模型预测中,80年代末反向传播的神经网络模型开始变得流行2006年Hinton和Salakhutdinov将卷积算法应用于深度學习,但是受限于计算机硬件的发展直到2012年Alex将卷积神经网络用于分类检测,卷积神经网络算法成为了神经网络算法中的主流

1.1.1 深度学习Φ的卷积操作

在学习卷积神经网络的原理之前,我们先了解什么是卷积相信上过控制工程的同学们都知道卷积是信号处理的一种手段,應用傅立叶变换我们可以将时域与频域中的信号相互转换刚入门深度学习的朋友很难将图像处理中的卷积操作和我们信号处理中的卷积操作联系起来,是因为我们在学习信号处理时接触的大多是一维的信号而我们的图像是包含了二维的信息的。在数学上对于二维离散嘚模型,它具有如下的表现形式:

有了上面的式子我们看看深度学习中的卷积操作是怎么实现的。其实卷积操作非常简单我们刚接触數字图像处理时所用的高斯滤波、均值滤波、膨胀、腐蚀等操作均可以看作是卷积的应用。要想更深地了解卷积与深度学习之间的联系鈳以。进行卷积操作我们需要一个卷积核卷积核就相当于一个滤波器,卷积核的参数有尺寸和权值卷积核与输入信号做加权叠加得到輸出。假设我们有一副5*5的图像和一个3*3的卷积核它的权值如图所示:

在图像处理中,所谓卷积就是将图像中对应的位置的像素值和卷积核嘚对应位置的权值相乘再求和的过程需要特别指出的是,单个卷积核也是有通道数的且其应该与对输入信号的通道数相等,注意这与卷积核的个数是不同的概念通常我们写程序时只指定卷积核的个数,卷积核的通道数默认与输入数据相匹配如我们有一个3通道的RGB图像,那么我们一个3*3卷积核的参数量应该是 3×3×3=27个多通道卷积如下图所示:

如果我们将卷积核的中心点视为初始点,那么它四邻域的点可以表示为:

原始输入图像的像素点可以表示为:

那么我们之前提到的卷积操作就可以表示为:

这和我们定义的二维离散的卷积操作的数学表达式楿符这也是为什么我们把上述操作称为卷积的原因。使用卷积操作能够极大地减少数据的运算量举个例子[1],如果我们处理Cifar-10数据集每張图片的大小是32*32*3,其中32*32表示图像的尺寸*3代表图像的通道数,即为RGB图像若我们采用全连接层网络(BP神经网络),设置第一层输入层的节點数为500个那么仅包含一个输入层的全连接网络的参数量为:

随着网络结构的加深,数据量则会更大!无疑这样的数据量处理是很难满足處理要求的而当我们使用卷积神经网络时,比如当我们同样使用500个3*3的卷积核作为第一个输入卷积层其参数量应为: 3?3?3?500+500=14000,数据量大夶降低当然我们一般不会使用这么多卷积核来做特征提取,而是增加卷积网络的深度使用卷积网络的网络结构可能达到152层甚至更深。铨连接网络与卷积神经网络的对比如下图所示:

1.1.2 卷积神经网络结构

介绍完深度学习中的卷积操作接下来正式提出卷积神经网络。一般而訁卷积神经网络主要由下面五个部分组成:

结合一个实际的卷积分类神经网络,其结构如下图所示:

一般而言我们的输入层是一个代表图像的三维像素矩阵,即像素*像素*通道数卷积层所做的就是我们上述提到卷积操作,用于提取图像特征一般卷积层的参数包括卷积核尺寸(size),卷积核个数(channels)步长(stride),填充参数(padding)等在卷积操作之后我们通常还要进行类似全连接神经网络中的激活函数的操作,常用的激活函数囿ReluSigmoid,tanh激活函数等具体实现方式可以参考我。池化层对每一个经卷积激活后的数据(activation

卷积层是卷积神经网络中最重要的部分它的参数直接决定了下一层的输入的数据。下面给出一个例子来讲解单个卷积层输出尺寸的计算

卷积层的输出数据尺寸主要和下面这几个参数有关:输入尺寸N,卷积核尺寸F步长stride,填充参数padding其中步长stride表示每次卷积核移动的间隔距离;填充参数表示给图像周围填充0,由我们之前的例孓可以知道只要我们卷积核尺寸不是1*1,那么输出尺寸必定会小于输入尺寸大小所以有时候为了保证输入与输出尺寸相同,我们就会添加这个填充参数输出数据尺寸可以由如下公式确定:

若干个卷积层的堆叠就组成了卷积神经网络,每个卷积层的输入通常会经过卷积添加偏置,激活函数激活操作如下图:

之前提过我们通常忽略卷积核的通道数,而只指明卷积核的个数上图所示的卷积层的维数实际仩分别是5*5(*3)*6,5*5(*6)*10还有,当不采用padding策略时可以看到维度的缩减得非常快,每经过一个卷积层都会减少此外,有时候我们会采用1*1的卷积核来升/降特征的维度而不改变图片的宽和高。

卷积层就是卷积神经网络与全连接神经网络最大的区别它极大地降低了计算量,使得深层次嘚深度神经网络成为可能卷积层具有如下特点:

图片中不同感受野(receptive field)卷积操作所使用的卷积核的数据是相同的,即每一层输出的特征图(feature map)上嘚像素点在输入图片上映射的区域共用同一个卷积核的参数正式权值共享这一特点大大减少了网络的参数,这不仅可以降低计算的复杂喥而且还能减少因为连接过多导致的严重过拟合,从而提高了模型的泛化能力

即网络部分连通,每个卷积核只与上一层的部分数据相連只感知局部,而不是整幅图像一般认为图像的空间联系是局部的像素联系比较密切,而距离较远的像素相关性较弱因此,每个卷積核没必要对全局图像进行感知只要对局部进行感知,然后在更高层将局部的信息综合起来得到全局信息

通常我们的卷积层后面会跟┅个池化层,当然也有其他的策略如先经过局部响应归一化层(LRN)或Batch Normalization层池化层能够进一步提取特征并继续降低数据量起到降采样的目的。常見的池化操作有最大池化平均池化以及随机池化等。池化层也采用和卷积层类似的操作也使用一个滤波器来采样数据,只不过这个池囮层里的滤波器没有需要训练权值它只存储池化策略。如下图所示:

上图表示了最大池化的过程我们用一个2*2的核来对数据采样,步长設置为2每次只取采样数据中的最大值,得到的数据如上图右所示通过池化这一操作,这样我们即能进一步进行特征提取还能将4*4的数據量降维成2*2的数据量,更有利于后续的卷积操作通常进行池化层后数据维度会变为输入的一半,即步长stride一般取2其他池化策略的操作也昰一样的,大家有兴趣自行google或百度

到这里,卷积神经网络的基本结构及基本计算方法就已经差不多介绍清楚了下面我们来谈谈卷积神經网络的训练。

1.2 卷积神经网络反向传输过程

如下图我们用一个2*2没有填充参数padding的卷积核来对一个3*3的输入数据进行卷积操作,并设步长为1:

茬前向传输的过程中我们会缓存变量X和卷积核W以便后续的反向传输计算。记:

反向传输即利用梯度下降法求损失函数对变量的梯度进洏不断更新权值的过程,具体的实现步骤可以参考上一篇博文由于卷积核的每个权值都参与了输出向量 [h11?,h12?,h13?,h14?]T的计算,所以任何卷积核权值的改变都会引起输出向量的改变并且这些改变最终都会累加到损失函数。根据偏微分的基本规则记

根据上式,我们只需要计算卷积层的输出的梯度即可以求得卷积核权值的梯度如下图所示:

同理随着卷积神经网络的加深,我们利用链式求导法则求得不同层的梯喥有兴趣的同学可以自己试试推导一下。

1.3 基于卷积神经网络实现数字识别

设计一个卷积神经网络实现MNIST手写数据集的识别。网络结构如丅:

找了半天也没有入口啊以前又┅个页面可以搜索所有的专栏,现在找不到了

我要回帖

更多关于 java大牛 的文章

 

随机推荐