zoukankan      html  css  js  c++  java
  • 机器学习初探(手写数字识别)matlab读取数据集

    手写数字识别是机器学习里面的一个经典问题,今天就这一段时间学习的机器学习,花一个下午茶的时间,试试机器学习。

    首先数据库是在MNIST(http://yann.lecun.com/exdb/mnist/)下载下来的。下载下来的数据如下图所示。官方有给出数据怎么读取,我自己没有仔细看,因为我看到网上有人公布代码如何读取。

    可以看到前四个是测试数据,后四个是训练数据。

    这里我用matlab尝试读取这些数据。

    首先看两个function。

    loadMNISTImages.m

    function images = loadMNISTImages(filename)
    %loadMNISTImages returns a 28x28x[number of MNIST images] matrix containing
    %the raw MNIST images
    
    fp = fopen(filename, 'rb');
    assert(fp ~= -1, ['Could not open ', filename, '']);
    
    magic = fread(fp, 1, 'int32', 0, 'ieee-be');
    assert(magic == 2051, ['Bad magic number in ', filename, '']);
    
    numImages = fread(fp, 1, 'int32', 0, 'ieee-be');
    numRows = fread(fp, 1, 'int32', 0, 'ieee-be');
    numCols = fread(fp, 1, 'int32', 0, 'ieee-be');
    
    images = fread(fp, inf, 'unsigned char');
    images = reshape(images, numCols, numRows, numImages);
    images = permute(images,[2 1 3]);
    
    fclose(fp);
    
    % Reshape to #pixels x #examples
    images = reshape(images, size(images, 1) * size(images, 2), size(images, 3));
    % Convert to double and rescale to [0,1]
    images = double(images) / 255;
    
    end
    loadMNISTLabels.m
    function labels = loadMNISTLabels(filename)
    %loadMNISTLabels returns a [number of MNIST images]x1 matrix containing
    %the labels for the MNIST images
    
    fp = fopen(filename, 'rb');
    assert(fp ~= -1, ['Could not open ', filename, '']);
    
    magic = fread(fp, 1, 'int32', 0, 'ieee-be');
    assert(magic == 2049, ['Bad magic number in ', filename, '']);
    
    numLabels = fread(fp, 1, 'int32', 0, 'ieee-be');
    
    labels = fread(fp, inf, 'unsigned char');
    
    assert(size(labels,1) == numLabels, 'Mismatch in label count');
    
    fclose(fp);
    
    end

    这两个函数就可以读取相应的数据。

    这个函数返回的训练数据集是784*60000的矩阵,这个可以看到是每一列是一个图片,总共是60000列,这些总共有10个数字,从0到9。也就是说每个数字在6000个左右。我们先取出来第一列看看。

    可以看到C是一个取出来的一个28*28的矩阵,就是一个图片。

     矩阵打印出来如下:

    可以看到应该是一个数字5。这里的0在图片里就是黑色,有数字的就是白色,看到都是小数,所以应该是标准化之后的,我们把矩阵乘以255后打印出来:

    可以看到打印出来就是这个样子。应该是个数字5。下面看读取label。

    看第一个数字是:

    可以看到label是对应60000个数字,每个数字对应的数字大概在6000个,我打印出来每个数字的个数:

    代码:

    结果:

    LA0里的每个数字都是LA中数字为0的下标。

     

  • 相关阅读:
    application.properties /application.yml官网查看配置;springboot application.properties 官网查看,info yml 查看;springboot.yml查看info;springboot.yml查看Actuator监控中心info
    Clion 教程书写Hello World,C语言开发;Clion 的C语言开发
    Host is not allowed to connect to this MySQL server---------------->windows10
    @RequestBody jackson解析复杂的传入值的一个坑;jackson解析迭代数组;jackson多重数组;jakson数组
    windows10 搭建Dubbo
    无DNS解析环境下部署Vcenter6.7
    常用联想网络连接
    Linux 不重启扫描存储磁盘
    WWN,WWNN,WWPN三者的区别
    HDFS、Ceph、GFS、GPFS、Swift 等分布式存储技术的特点和适用场景
  • 原文地址:https://www.cnblogs.com/LoganChen/p/7832105.html
Copyright © 2011-2022 走看看