%A MNIST adatbázis CNN-nel

%Az adatokat a digits_data.mat struktúrába mentettem el.
%A struktúrának 4 mezõje van, ezekrõl a struktúra betöltése után 
%a parancsablakba a digits_data kifejezést gépelve kaphatunk infót.
load digits_data;

%Az Xtrain mezõrõl betöltjük a tanulóadatokat. Ezen a mezõn egy 
%(28x28x1x60000)-es 4D tömb van. Az X(:,:,:,i) az i-edik tanulókép lesz. 
X=digits_data.Xtrain;
%A Ttrain mezõrõl betöltjük a tanulóadatokhoz tartozó targetvektort. 
%Ez egy 60000 elemû categorical típusú vektor
trainT=digits_data.Ttrain;

%definiáljuk a layer-eket 
layers = [imageInputLayer([28 28 1])
          convolution2dLayer(5,20)
          reluLayer
          maxPooling2dLayer(2,'Stride',2)
          convolution2dLayer(5,20)
          reluLayer
          maxPooling2dLayer(2,'Stride',2)
          fullyConnectedLayer(80)
          fullyConnectedLayer(10)
          softmaxLayer
          classificationLayer()];

%beállítjuk a tanítás paramétereit
options = trainingOptions('sgdm','MaxEpochs',15, ...
	'InitialLearnRate',0.001);

%A tanítás
convnet = trainNetwork(X,trainT,layers,options);

%Az Xtest mezõrõl beolvassuk a tesztadatokat, és teszteljük a hálózatot
Xtest=digits_data.Xtest;
predT=classify(convnet,Xtest);

%A Ttest mezõrõl beolvassuk a tesztadatokhoz tartozó targetvektort
%és kiszámítjuk a pontosságot
testT=digits_data.Ttest;
accuracy=sum(testT==predT)/numel(testT)