-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfc_learning_api_mnist.m
45 lines (31 loc) · 1.74 KB
/
fc_learning_api_mnist.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
function [ output_args ] = fc_learning_api( input_args )
%FC_LEARNING_API Summary of this function goes here
% Detailed explanation goes here
startup();
[train_input, train_classes, test_input, test_classes] = GenerateDatasetMNIST();
hidden_neurons_count = 500;
output_neurons_count = 10;
input_dim = size(train_input,2);
rng(0,'v5uniform');
learningRate = 0.0005;
momentum = 0.9;
weightDecay = 0.0005;
nn = network();
nn.addLayer(LayerInput(input_dim), {});
nn.addLayer(LayerFC(input_dim,hidden_neurons_count,WeightFillerGaussian(1/(input_dim + hidden_neurons_count))), GradientUpdaterUsingMomentumAndWeightDecay(learningRate, momentum, weightDecay));
nn.addLayer(LayerActivationRELU, {});
nn.addLayer(LayerFC(hidden_neurons_count,output_neurons_count,WeightFillerGaussian(1/(hidden_neurons_count + output_neurons_count))), GradientUpdaterUsingMomentumAndWeightDecay(learningRate, momentum, weightDecay));
nn.addLayer(LayerActivationRELU, {});
epochs = 30;
minibatchSize = 64;
trainSoftmaxNetwork(nn, epochs, minibatchSize, train_input, train_classes);
output_train_full = nn.forwardPropogate(train_input);
[~, ind_train] = max(output_train_full{end}');
[~, ind_train_gt] = max(train_classes');
accuracy_train = (sum(ind_train == ind_train_gt)) / numel(ind_train);
output_test_full = nn.forwardPropogate(test_input);
[~, ind_test] = max(output_test_full{end}');
[~, ind_test_gt] = max(test_classes');
accuracy_test = (sum(ind_test == ind_test_gt)) / numel(ind_test);
disp(['train accuracy : ' num2str(accuracy_train) ' test accuracy : ' num2str(accuracy_test)]);
end