【深度学习基础】数字手势识别实验:2.MLP

本实验系列文章目录如下,相关代码(python)托管在我的Github - SIGNS experiment,欢迎访问;

数字手势识别实验:2.MLP


基础回顾 - MLP

MLP(Multi-layer Perceptron,多层感知机)是建立在全连接基础上的多层前向神经网络。形如下图:

在隐含层数目较大时,MLP常被称作深层神经网络(DNN)。本实验拟基于Tensorflow框架实现MLP。

实验模型设计

要设计MLP模型,必须明确输入输出数据维度。根据MLP的全连接特点,由图片数据可以计算出输入维度n_x=64×64×3=12288(64×64像素大小,RGB三通道),输出维度n_y=6(即0,1,2,3,4,5)。可将问题看作是一个多分类问题。设计出MLP的初始化结构如下图示:

这里的隐含层采用ReLU激活函数,输出层采用Softmax,隐层规模与参数维度已在图中注明,可以直接基于Tensorflow写出基本的MLP实现代码(代码参考:mlp_1.py),这里的实现过程关键点有:

  • 根据tensorflow建模流程,先构建computation graph,再基于session运行。
  • 参数初始化时采用Xavier initialization,注意参数维度的设置;
  • cost计算采用cross_entropy函数;
  • 优化过程采用gradient descent,目标即为最小化cost
  • 采用mini-batch策略提高训练效率;

训练与验证

加载数据,对模型进行训练与验证,得出代价曲线变化图:

最终的误差结果为:

Train Accuracy: 1.0
Test Accuracy: 0.891667

其中一部分测试集手势图像的预测结果显示如下图示:

小结

这里的优化方法采用的是最简单的梯度下降法(GradientDescentOptimizer()),结合所学知识,可在接下来的实验中尝试采用提高训练效率的方法(trick),如采用Momentum、Batch-Norm等。

结果显示训练集已经完全拟合(Train Accuracy=1.0),同时考虑到这里只有约1k的训练样本,故需担心是否过拟合。测试集精度(Test Accuracy=0.891667)较训练集还有较大差距,同时考虑到测试集和训练集样本图像均是采用同样的方式获取的手势图像,故而不考虑dis-match问题,所以接下来应考虑如何提高模型的泛化能力(降低variance),如采用Dropout策略。

下面的实验中,我们将依次学习使用Momentum、Batch-Norm、Dropout等深度学习中常见的tricks。

下一篇:数字手势识别实验:3.Momentum(动量法优化)

猜你喜欢

转载自blog.csdn.net/snoopy_yuan/article/details/78163092