美文网首页
minst 项目_Update1

minst 项目_Update1

作者: null1106 | 来源:发表于2017-04-16 18:19 被阅读0次

    github:https://github.com/wuzy361/mnist_homework_project

    由来

    本学期,有一门课叫《高级程序设计c#》,实际上的python课,所以留的项目也是python的。我们小组项目选的是基于minst手写库的机器学习算法性能比较,如果我熟悉tensorflow库了,可能会加入使用tensorflow深度学习的算法,但希望渺茫。

    minst介绍

    minst其实是 THE MNIST DATABASE of handwritten digits 。一个手写图片库,主要是提供四个数据集的下载,如下:

    Paste_Image.png
    前两个是训练集,后两个是测试集,训练集有6万个手写图片的像素信息以及标签,测试集有1万个。每一个图片像素是28*28的,还原后是这个样子的: Paste_Image.png

    但文件不是图片的格式,解压后文件格式是无符号字节流,这就需要我们使用数据集前先解析文件,王晗老师给我们组提了宝贵的建议,简要概括就是”高度模块化,提高代码复用性“。实际中就是,最好单独写一个解析文件,来解析数据集,不要把代码都放到一个文件里,这样你写的代码更容易给他人或者别的项目使用。这是个非常宝贵的意见。可以让我的代码看起来没有那么low。下面说明一下解析文件 input_file.py。

    input_file.py

    这个文件是专门用来把数据集转换成我们机器学习所需要的文件类型。下面我想粘代码,我会用图片的形式展示代码,而不是文本。好处有二:1,简书的代码高亮太丑,也有可能是我设置不对。2,手机看简书的时候代码是没有高亮的,代码粘成图片可以方便手机回顾。

    Paste_Image.png
    这里是返回标准格式的Date,你传入参数“train”或者“test”来控制得到的是训练集还是测试集数据。这里必须要提一下struct这个库,我在这浅析Python中的struct模块里面看到了相关简介,这里主要是用到了struct.unpack_from()函数,它有三个参数,第一个是读取模式,第二个是缓存,描述了从那个地方读,第三那个是偏移量。
    magic , numImages , numRows , numColumns = struct.unpack_from('>IIII' , buf , index)
    

    这行代码意思就是从buf里面,从index这个地方,以大端存储的方式读取4个unsigned int的长度,所以就有四个返回值(准确说是返回了四个元素的列表,函数永远只有一个返回值)。‘>’代表大端存储,‘<’代表小段存储,正好是大于小于号,很好集。后面'IIII'等的含义见下表:

    Paste_Image.png

    每个变量的含义:
    magic:魔数,用来鉴别文件的,暂时用不着。
    NumImages:图片的数目
    NumRows:图片的行像素的大小
    numColumns:图片的列像素的大小
    为什么我会这道这些信息呢,官方网站拉到最下面可以看到说明:

    Paste_Image.png

    这样,从第16个字节开始,就是这个数据集真正的内容了,之后每个字节代表一个像素的取值,取值范围是0-255,0代表全白,255代表全黑。由于图片是28*28的,所以每读取784个像素,就相当于读取了一张图片,把所有值添加到列表里,最后在转化成numpy.array格式的。

    main.py

    Paste_Image.png

    现在只写了测试函数,引用了input_file的函数,使用getData和getLabel得到数据,检查是否数据和标签匹配。这几个语句测试了训练集5-10,测试集105-110,范围可以随便取。程序结果如下:

    Paste_Image.png Paste_Image.png

    跳过一段,再看测试集:

    Paste_Image.png Paste_Image.png

    可以看到,数据和标签是匹配的,这大概可以说明,input_file是正常工作的。

    相关文章

      网友评论

          本文标题:minst 项目_Update1

          本文链接:https://www.haomeiwen.com/subject/rrvaattx.html