Windows NP开机一直是这个页面,过了一会儿才过去?

  上一节,我们已经学会了基于PyTorch深度学习框架高效,快捷的搭建一个神经网络,并对模型进行训练和对参数进行优化的方法,接下来让我们牛刀小试,基于PyTorch框架使用神经网络来解决一个关于手写数字识别的计算机视觉问题,评价我们搭建的模型的标准是它是否能准确的对手写数字图片进行识别。

  其具体的过程是:先使用已经提供的训练数据对搭建好的神经网络模型进行训练并完成参数优化,然后使用优化好的模型对测试数据进行预测,对比预测值和真实值之间的损失值,同时计算出结果预测的准确率。在将要搭建的模型中会使用到卷积神经网络模型,下面让我们开始学习吧。

 知识储备——深度学习中的常见概念

1:MNIST数据集的了解

  MNIST数据集是一个已经被“嚼烂”了的数据集,很多教程都会对他“下手”,几乎成为了一个典范。

   具体详情请参考 或

  下载下来的文件如下:

   可从该页面获得的MNIST手写数字数据库具有60,000个示例的训练集和10,000个示例的测试集。它是NIST提供的更大集合的子集。数字已经过尺寸标准化,并以固定尺寸的图像为中心。

  对于那些希望在实际数据上尝试学习技术和模式识别方法,同时在预处理和格式化方面花费最少的人来说,它是一个很好的数据库。

  在对决策函数进行优化的时候,通常是针对一个误差的度量,比如误差的平方,以求得一系列参数,从而最小化这个误差度量的值来进行的,而目前一般采用的计算方法是梯度递减法(Gradient Descent Method )。这是一个非常形象的名字,好比一个游客要从某个不知名的高山上尽快,安全的下到谷底,这时候需要借助指南针来引导方向。对于这个游客,他需要在南北和东西两个轴向上进行选择,以保证下山的路在当前环境下即使最快的,又是最安全的。我们可以将南北和东西两个轴向想象成目标函数里面的两个维度或者自变量。那么这个游客怎么获取这个最优的路径呢?

  在山顶的时候,游客因为不能完全看到通往谷底的情况,所以很可能随机选择一条路线。这个选择很多时候很关键。一般山顶是一块平地,有多个可以选择下山的可能点。如果真正下山的路线是在某个地方,而游客选择了另外一个地方,则很有可能最终到不了真正的谷底,可能到达半山腰或者山脚下的某一个地方,但是离真正的谷底差距可能不小。这就是优化问题中的由于初始化参数不佳导致只能获取局部最优解的情况,下图就形象的展示了这样的情况。

在优化算法中初始值的影响

  梯度递减法是一种短视的方法,好比游客在下山的时候遇到非常浓的大雾,只能看见脚下一小块的地方,游客就把一个倾角计放在地上,看哪个方向最陡,然后朝着最陡的方向往下滑一段距离,下滑的距离通常根据游客对当前地形的审视度势来决定,停下来,再审视周边哪个方向现在是最陡的。继续重复上面的倾角计算并往下滑的动作,这跟优化中常用的最陡下降法很类似,可以看做最陡下降法的一个特例。在最陡下降法中,参数的更新使用如下公式:

  但是在使用梯度递减法求解神经网络模型时,通常使用的是随机梯度递减法(Stochastic Gradient Descent),其公式如下:

  这个算法有如下几点变化:

 首先,在计算时不是通览所有的数据后再执行优化计算,而是对于每个观测值或
者每组观测值执行梯度递减的优化计算。原来的那种算法因此被叫作批量(Batch)
或者离线(Offline)算法,而现在这种算法则被称为递增(Incremental)或者
在线(Online)算法,因为参数估计值随着观测组的更新而更新。
 其次,这个步进值通常从一开始就固定为一个较小的值。
 最后,通过上述公式可以看出,参数更新部分不仅取决于一阶偏微分的大小,还
包含了一个动量项 这个动量项的效果是将过去的累计更新项的一部分加入到当前参
数的更新项中,即把过去每一步的更新做一个指数递减的加权求和,可以看作对过
往的更新值的记忆,越远的记忆影响越小,越近的记忆影响越大。这有助于算法的
稳定性。如果步进值极小,而动量项里的控制变量α接近于数值1,那么在线算法就

   下图对梯度递减算法进行了形象的展示:

  虽然现在最常见的算法是基于一阶偏微分的梯度递减法,但是跟其他几种以前常用的基于二阶偏微分的优化算法进行比较还是比较有趣的,有助于读者更好地理解这些算法。
  基于二阶偏微分的算法通常统称为牛顿法,因为使用了比一阶偏微分更多的信息,可以看作游客在下山的过程中雾小了点,能直接看到周边的地势。假定整座山是一个平滑的凸形状,游客就可以一路下滑到谷底,不用中途停下来。当然,这个谷底也不能保证是最低的,有可能也是某个半山腰的洼地,因为还是有雾,游客无法彻底看清整个地势。
  对一般的牛顿法的一种改进叫作增稳牛顿法(Stabilized Newton Method)。这种方法相当于游客带了一个高度计,因此他在滑下去以后可以查看结果,如果发现地势反而增高了,那么游客退回到原来的地方,重新跳一小步,从而保证每次下滑都能到达更低的点。对这种方法的进一步改进叫作岭增稳牛顿法(Ridge Stabilized NewtonMethod)。这种方法在上一种方法的基础上,游客不仅可以退回到原来的地方,而且重新下滑时还可以选择跳的方向,以保证有更多的机会使得下滑都离谷底更进一步。

  对于深度学习模型中的函数,我们看到在每一层的节点都是一个激活函数套着一个组合函数的形式(参见图pose([pose([transforms.ToTensor(), # 在顺利完成数据装载后,我们可以开始编写卷积神经网络模型的搭建和参数优化的代码 # 识别比较简单,我们只是用了两个卷积层,一个最大池化层,两个全连接层。 # 对参数实现扁平化。最后通过自己self.dense定义的全连接层进行最后的分类 # 在编写完搭建卷积神经网络模型的代码后,我们可以对模型进行训练和参数进行优化了 # 首先 定义在训练之前使用哪种损失函数和优化函数 # 下面定义了计算损失值的损失函数使用的是交叉熵 # 优化函数使用的额是Adam自适应优化算法 # 将所有的模型参数移动到GPU上 # 卷积神经网络模型进行模型训练和参数优化的代码

   用于测试的数据标签结果输出的结果如下:

   在输出结果中,第1个结果是我们训练好的模型的预测值,第2个结果是这4个测试数据的真实值。对测试数据进行可视化,如图所示:

  可以看到,在图中可视化的这部分测试集图片,模型的预测结果和真实的结果是完全一致的。当然,如果想选取更多的测试集进行可视化,则只需将batch_size的值设置得更大。

我要回帖

更多关于 电脑开机就卡在windows界面 的文章

 

随机推荐