• 菜鸟学卷积神经网络基础知识(一)手写数字数据库究竟是个啥?


    菜鸟学卷积神经网络基础知识(一)手写数字数据库究竟是个啥?

    卷积神经网络作为深度学习方法的一种在计算机视觉中应用广泛。菜鸟一直想以这个作为切入点来学习深度学习知识,找到一个老外在06年写的用卷积神经网络识别手写字符的代码。以这个代码为例子,好好学习这么搭建和训练一个卷积神经网络。

    网址在这:

    http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi

    第一步,数据集是什么?

    MNIST是一个据说很出名的手写数字数据库,据说是美国中学生手写的数字.这就是数据集的来源http://yann.lecun.com/exdb/mnist/

    四个文件

    train-images-idx3-ubyte: training set images 
    train-labels-idx1-ubyte: training set labels 
    t10k-images-idx3-ubyte:  test set images 
    t10k-labels-idx1-ubyte:  test set labels

    免费的开源 7-Zip 实用程序可以对gz文件夹进行解压,就能得到上述文件。数据集包含的共 70,000 图像 ; 60,000 训练图像 (用于创建红外模型) 和 10,000 测试图像 (用于评估模型的精度)。 每个 MNIST 图像是一个单一的手写的数字字符的数字化的图片。 每个图像是 28 x 28 像素大小。 每个像素值是 0,表示白色,至 255,表示黑。 中间像素值表示的灰度级。  1 显示了训练集的前八位的图像。 对应于每个图像的实际数字是显然的对于人来说,但确定数字是非常困难的挑战的计算机。

    图 1 首八 MNIST 训练图像

    RAINING SET LABEL FILE (train-labels-idx1-ubyte):

    [offset] [type]          [value]          [description] 
    0000     32 bit integer  0x00000801(2049) magic number (MSB first) 
    0004     32 bit integer  60000            number of items 
    0008     unsigned byte   ??               label 
    0009     unsigned byte   ??               label 
    ........ 
    xxxx     unsigned byte   ??               label

    The labels values are 0 to 9.

    TRAINING SET IMAGE FILE (train-images-idx3-ubyte):

    [offset] [type]          [value]          [description] 
    0000     32 bit integer  0x00000803(2051) magic number 
    0004     32 bit integer  60000            number of images 
    0008     32 bit integer  28               number of rows 
    0012     32 bit integer  28               number of columns 
    0016     unsigned byte   ??               pixel 
    0017     unsigned byte   ??               pixel 
    ........ 
    xxxx     unsigned byte   ??               pixel

    Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).

    TEST SET LABEL FILE (t10k-labels-idx1-ubyte):

    [offset] [type]          [value]          [description] 
    0000     32 bit integer  0x00000801(2049) magic number (MSB first) 
    0004     32 bit integer  10000            number of items 
    0008     unsigned byte   ??               label 
    0009     unsigned byte   ??               label 
    ........ 
    xxxx     unsigned byte   ??               label

    The labels values are 0 to 9.

    TEST SET IMAGE FILE (t10k-images-idx3-ubyte):

    [offset] [type]          [value]          [description] 
    0000     32 bit integer  0x00000803(2051) magic number 
    0004     32 bit integer  10000            number of images 
    0008     32 bit integer  28               number of rows 
    0012     32 bit integer  28               number of columns 
    0016     unsigned byte   ??               pixel 
    0017     unsigned byte   ??               pixel 
    ........ 
    xxxx     unsigned byte   ??               pixel

    Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black). 

    怎么都数据?参考这两篇文章

    https://msdn.microsoft.com/zh-cn/magazine/dn745868.aspx

    http://blog.csdn.net/fengbingchun/article/details/49611549

    实际上很简单,一个是图像数据,一个是标签数据,都是一大串二进制数据。图像数据:最前面的32位是magic number ,然后32位是图像大小,再然后32位是图像行,接着32位是图像的列。接下来就是图像的像素灰度值,无符号8位,正好对应0-255。一直数28*28个无符号8位的数据,这些数据是一行,把它按照row-wise貌似是行进行重构就成了一个28*28的第一张图像。后面的数据同理。标签数据同理,只不过无符号8位数据对应的不是灰度值,而是标签。

    OK 介绍完这个,看看那个老外是怎么实现读入MINIST的,搞清楚它这个就好进行修改它的程序了。主要是这个函数OnButtonOpenMnistFiles()

     

     

    函数开始建了头文件信息的结构体,包括nMagic、nItems、nRows、nCols。和说明一一对应的。然后通过这几个

    CFile m_fileTrainingLabels;

    CFile m_fileTrainingImages;

    CFile m_fileTestingLabels;

    CFile m_fileTestingImages;

    来读取弹出对话框中选择的文件路径中文件。当然还要判断文件中的数据是否是MINIST中文件的数据。四个文件读取完毕后,实际上获取了指向这四个文件的文件指针。

    然后用下面两个函数就能获取图像数据

       定位到图像数据位置

    m_fileTrainingImages.Seek( fPos, CFile::begin );

       读取图像数据到二维数组

    m_fileTrainingImages.Read( pArray, cCount );

  • 相关阅读:
    关于win10输入法问题(打不出中文)解决方法
    Docker 修改默认存储位置
    Enabling and Mounting NFS on CoreOS
    docker run mysql
    Specified key was too long; max key length is 767 bytes mysql
    C# 实现 Snowflake算法 ID生成
    无忧之道:Docker中容器的备份、恢复和迁移
    IIS Express 虚拟目录
    从零開始学android<AnalogClock与DigitalClock时钟组件.三十一.>
    jquery版本号升级不兼容的问题:$("input").attr("value")功能发生改变
  • 原文地址:https://www.cnblogs.com/love6tao/p/5001947.html
Copyright © 2020-2023  润新知