zoukankan      html  css  js  c++  java
  • Kaggle练习001--Digit Recognizer(MNIST)

    MNIST数字识别是机器学习项目的经典案例,在Kaggle上也有此项比赛,本文中的代码是使用TensorFlow与Keras实现的。

    我已将代码放到了我的Github上,有兴趣的朋友可以看一下。

    目前更新了四个版本,下面简要介绍一下每个版本的主要内容。

    v0.1版本,使用的是两层全连接神经网络(不计算输入层,两层网络是指一个隐藏层和一个输出层):

    输入数据为28*28=784维向量,使用线性输入函数。

    隐藏层含500个单元,使用relu激活函数。

    输出层含10个单元,使用softmax输出函数。

    此版本使用tensorflow的低层api训练模型,5,000轮迭代,每个批次100条数据,最终准确率为97.528%。


    v0.2版本,网络结构与1.0版本一致。使用tensorflow的Keras API,200轮迭代,每个批次100条数据,最终准确率为96.342%。

    我认为准确率不如上一个版本的主要原因是没有使用“滑动平均”等优化方式。使用Keras会缩减代码量,增加可读性。


    v0.3版本,使用原生Keras API,使用CNN结构(LeNet-5),20轮迭代,每个批次128条数据,最终准确率为97.8%。

    LeNet-5卷积神经网络是由两个卷积层(各含一个最大池化层)和三个全连接层组成。


    v1.0版本,参考Kaggle上的一个Kernel,使用Keras + TensorFlow,CNN结构在LeNet-5的基础上进行改进。(注:红色为在LeNet-5基础上新增加的层)

    Input -> C2D -> C2D -> MaxPool -> DropOut -> C2D -> C2D -> MaxPool -> DropOut -> FC -> FC ->DropOut -> Out

    并且还使用了“交叉验证”、“学习率衰减”、“图片数据增强”等方式,提高模型的精度。5轮迭代,每个批次86条数据,最终准确率为99.014%

    可以看到经过以上的处理,比v0.3版本的准确率提高了1.2%,效果还是比较明显的。

    除v1.0版本以外(v1.0版本只包含一个文件),之前的几个版本的程序均包含5个文件,其功能一致:

    constantInit.py用于参数初始化。

    dataLoad.py用于数据的加载和保存。

    main.py是主程序模块。

    sample_submission.csv是预测的结果,可直接提交到Kaggle上。

    trainingModel.py是训练模型模块。

    注意:

    Kaggle的数据是整型,需要先把数据转化为浮点值。Kaggle上提供2个文件,需要将训练集进行划分:

    将原训练集42,000条分为:训练集38,000条,验证集4,000条。

    原测试集28,000条,数量不变,只将其转为浮点数。

  • 相关阅读:
    RK 清理后台所有历史App任务
    RK onConfigurationChanged ConfigChanges 设备状态的改变
    RK audio 拨号同时输出Speaker和USB音频
    RK 微信视频通话预览倒立
    Unity 笔记
    C# 泛型约束为枚举
    Unity Editor 扩展PropertyDrawer (属性的 Inspector )
    Unity Editor 笔记
    Unity 反转法线,在 Hierarchy 视图对象的快捷菜单中增加 Flip Mesh Normals(反转网格法线)项
    Blender 2.9 骨骼
  • 原文地址:https://www.cnblogs.com/asenyang/p/11066786.html
Copyright © 2011-2022 走看看