机器学习初探(手写数字识别)matlab读取数据集

Posted alittlecomputer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习初探(手写数字识别)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的下标。

 

 

以上是关于机器学习初探(手写数字识别)matlab读取数据集的主要内容,如果未能解决你的问题,请参考以下文章

机器学习——15 手写数字识别-小数据集

机器学习15 手写数字识别-小数据集

机器学习十五----手写数字识别-小数据集

通过MATLAB读取mnist数据库

机器学习——15 手写数字识别-小数据集

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