Posts

MNIST Kaggle Challenge

Image
一、 实验背景 在日常生活中,需要手写大量的数字,在录入这些数字需耗费非常多的 时间和力气,同时还容易出现错误,因此要求设计一个手写体数字照片 智能分类程序,省去人工识别数字 0-9 的麻烦,利用 Kaggle 平台所提供 的数字照片灰度数据进行模型训练,完成该平台的 Digit Recognizer 竞 赛任务。 二、 模型结构图与流程分析 本次实验中我利用了 Keras 深度学习框架来完成该数字识别任务。 Keras 是一个支持卷积神经网路,循环神经网路的 Python 深度学习库, 能够运行在 Theano 或者 Tensorflow 上,本实验中我则是利用 Tensorflow 来进行底层的计算。 Keras 拥有相对简单的学习曲线,但是 与其他深度学习框架相比拥有较差的灵活性。 Kaggle 上的训练集与测试数据都是图片的像素信息,每一个图片都为 28x28 像素 首先读取 Kaggle 训练集,输入像素信息,共有 28x28=784 行的信息,将原始数据随机化( BP 随机梯度下降),使用 ReLU 函数激活后,利用二维的卷积层 (Conv2D, 用于对图像的空间卷积 ) ,之后在每一个步长 (Stride=1) 进行 4x4 的池化,减少计算量,在进行采样和边界补零 (ZeroPadding) ,减少边界丢失信息对模型的影响。接下来再进行第二次的模型采样和池化,同时加入 Dropout 函数,在每次训练时以 0.1 的概率随机的舍弃一些隐层单元,避免过拟合的发生。最后进入全连接层,加入 Softmax 函数强化特征,使得分类模型中强的特征更加强,弱的特征更加的弱,让分类能更加准确,最后输出分类结果。     最佳准确率   从上述截图中,可看出我训练的模型最佳准确率为 98.828% ,在第二次提交的时候所达成,第三次提交则是修改了池化的大小,结果造成了准确率的降低。原因估计是因为池化的大小增加所造成取样点的精准度降低才会造成准确率的下降。   一、      问题思考   1.    实验训练什么时候停止是最合适的?简要陈述你的实现方式,并试分析固定迭代次数与通过验证集调整等方法的优缺点。 答: 实验训练停止的条件有两种办法,第一种是设定一个阈值,当已训练的最大值减去本次训练的最大值大于阈值时停止训练。第二种方法是设定