机器学习初探(手写数字识别)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的下标。

时间: 2024-08-29 07:16:22

机器学习初探(手写数字识别)matlab读取数据集的相关文章

【机器学习】手写数字识别算法

1.数据准备 样本数据获取忽略,实际上就是将32*32的图片上数字格式化成一个向量,如下: 本demo所有样本数据都是基于这种格式的 训练数据:将图片数据转成1*1024的数组,作为一个训练数据. 训练数据集:https://github.com/zimuqi/machine_Learning/tree/master/ch02/trainingDigits 测试数据集:https://github.com/zimuqi/machine_Learning/tree/master/ch02/test

MFC基于对话框 手写数字识别 SVM+MNIST数据集

完整项目下载地址: http://download.csdn.net/detail/hi_dahaihai/9892004 本项目即拿MFC做了一个画板,画一个数字后可自行识别数字.此外还 有保存图片.清空画板功能,简单实用. 识别方法为SVM调用已经训练好的MNIST数据集"SVM_DATA.xml" MNIST数据集训练方法自行百度,一大堆. 本项目基于OpenCv 2.4.6,下载的朋友自行修改配置为自己使用的OpenCv版本即可.

在Kaggle手写数字数据集上使用Spark MLlib的朴素贝叶斯模型进行手写数字识别

昨天我在Kaggle上下载了一份用于手写数字识别的数据集,想通过最近学习到的一些方法来训练一个模型进行手写数字识别.这些数据集是从28×28像素大小的手写数字灰度图像中得来,其中训练数据第一个元素是具体的手写数字,剩下的784个元素是手写数字灰度图像每个像素的灰度值,范围为[0,255],测试数据则没有训练数据中的第一个元素,只包含784个灰度值.现在我打算使用Spark MLlib中提供的朴素贝叶斯算法来训练模型. 首先来设定Spark上下文的一些参数: val conf = new Spar

CNN-mnist手写数字识别

Tensorflow+CNN下的mnist数据集手写数字识别 加载数据集 MNIST数据集包含55000个训练样本,10000个测试样本,还有5000个交叉验证数据样本. 输入:加载的每个手写数字图像是28 x 28像素大小的灰度图像.为了简化起见,将28x28的像素点展开为一维数据(shape=784). 输出:每张测试图片的预测结果y为一个10维数组,数组中值的取值范围为[0,1],使用tf.argmax(y,1),取出数组中最大值的下标,再用独热表示以及模型输出转换成数字标签.      

C#中调用Matlab人工神经网络算法实现手写数字识别

手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写阿拉伯数字识别是图像内容识别中较为简单的一个应用领域,原因有被识别的模式数较少(只有0到9,10个阿拉伯数字).阿拉伯数字笔画少并且简单等.手写阿拉伯数字的识别采用的方法相对于人脸识别.汉字识别等应用领域来说可以采用更为灵活的方法,例如基于规则的方法.基于有限状态自动机的方法.基于统计的方法和基于神

C++使用matlab卷积神经网络库MatConvNet来进行手写数字识别

环境:WIN10(64 bit)+VS2010(64 bit)+Matlab2015b(64 bit) 关于MatConvNet的介绍参考:http://www.vlfeat.org/matconvnet/ Github下载地址为:https://github.com/vlfeat/matconvnet/ 我们的目的是将MatConvNet自带的手写数字识别DEMO移植到一个简单的WIN32 DEMO中使用,主要过程有以下几个步骤: (1)配置MatConvNet,然后将手写数字识别DEMO编译

机器学习(二)-kNN手写数字识别

一.kNN算法 1.kNN算法是机器学习的入门算法,其中不涉及训练,主要思想是计算待测点和参照点的距离,选取距离较近的参照点的类别作为待测点的的类别. 2,距离可以是欧式距离,夹角余弦距离等等. 3,k值不能选择太大或太小,k值含义,是最后选取距离最近的前k个参照点的类标,统计次数最多的记为待测点类标. 4,欧式距离公式: 二.关于kNN实现手写数字识别 1,手写数字训练集测试集的数据格式,本篇文章说明的是<机器学习实战>书提供的文件,将所有数字已经转化成32*32灰度矩阵. 三.代码结构构成

DeepLearning (四) 基于自编码算法与softmax回归的手写数字识别

[原创]Liu_LongPo 转载请注明出处 [CSDN]http://blog.csdn.net/llp1992 softmax 回归模型,是logistic 回归模型在多分类问题上的推广.关于logistic回归算法的介绍,前面博客已经讲得很清楚,详情可以参考博客 机器学习实战ByMatlab(五)Logistic Regression 在logistic回归模型中,我们的激励函数sigmoid的输入为: z=θ0x0+θ1x1+θ2x2+...+θnxn 则可以得到假设函数为: hθ(x)

Tensorflow实战 手写数字识别(Tensorboard可视化)

一.前言 为了更好的理解Neural Network,本文使用Tensorflow实现一个最简单的神经网络,然后使用MNIST数据集进行测试.同时使用Tensorboard对训练过程进行可视化,算是打响学习Tensorflow的第一枪啦. 看本文之前,希望你已经具备机器学习和深度学习基础. 机器学习基础可以看我的系列博文: https://cuijiahua.com/blog/ml/ 深度学习基础可以看吴恩达老师的公开课: http://mooc.study.163.com/smartSpec/