機器學習初探(手寫數字識別)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的下標。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM