-
Notifications
You must be signed in to change notification settings - Fork 1
/
loadMNISTDataset.m
71 lines (55 loc) · 2.7 KB
/
loadMNISTDataset.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
function [digits, labels] = loadMNISTDataset(imagesFilename, labelsFilename)
% Il dataset MNIST contiene 60.000 digits di dimensione 28x28 pixel. Questa
% procedura richiama due funzioni realizzate dall'universita' di Stanford che
% permettono di estrarre, dai dataset MNIST specificati nei parametri della
% funzione delle immagini e delle labels, due matrici: digits e labels.
%
% Parametri di input
% imagesFilename : path al file contenente il dataset delle immagini
% labelsFilename: path al file contenente il dataset delle labels
%
% Parametri di output
% digits : e' una matrice di dimensione 60000x784. Sulle righe della
% matrice sono riportati i digits e sulle righe le
% rappresentazioni dei digits. Ad esempio, digits(i,:) e' la
% rappresentazione del digit i-simo. Per strutturare un digit
% secondo la sua rappresentazione originale basta riorganizzare
% la matrice digits(i,:) come una matrice 28x28, utilizzando
% la funzione reshape(digits(i,:), [28,28]).
% labels : e' una matrice 60000x1. Ogni riga della matrice contiene la
% label per la digit corrispondente. Ad esempio, labels(i) e'
% l'etichetta che descrive il contenuto del digit i-simo.
digits = (loadMNISTImages(imagesFilename))';
labels = loadMNISTLabels(labelsFilename);
end
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
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