-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathexample_MicroDoppler.m
More file actions
109 lines (98 loc) · 3.63 KB
/
example_MicroDoppler.m
File metadata and controls
109 lines (98 loc) · 3.63 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
clc;
clear all;
close all;
dbstop if error
mpiprofile on -historysize 150000000;
%% Load Data (MicroDoppler)
load('MicroDoppler.mat');
% The MicroDoppler.mat file can be downloaded from https://1drv.ms/u/s!Akr-loZjbPYVufFK8J6pAMtHi1fEyA?e=T6Vgss
%% Training Options
to.epochs = 5; % Epoch number
to.batch = 78; % Batch number
to.batch_size = 64; % Batch size
to.alpha = 0.1; % Learning raten
to.momentum = 0.9; % Momentum
to.mom = 0.5; % Initial momentum
to.momIncrease = 20; % Momemtum change iteration count
to.lambda = 0.0001; % Weight decay parameter (a.k.a. L2 regularization parameter)
to.useGPU = 1; % Use GPU
if to.useGPU == 1
reset(gpuDevice(1)); % Initialize GPU
end
%% Initialize CNN
cnn = cnnInit(to);
feature('SetPrecision', 24);
%% Configure Layers
cnn = cnnAddInputLayer(cnn, [400, 144], 1);
% subnet 1: CNN
cnn1 = cnnInit(to);
cnn1 = cnnAddInputLayer(cnn1, [400, 144], 1);
cnn1 = cnnAddTransformLayer(cnn1, 'PCA', 1:8);
cnn1 = cnnAddConvLayer(cnn1, [5, 5], 8, 'r');
cnn1 = cnnAddBNLayer(cnn1);
cnn1 = cnnAddActivationLayer(cnn1, 'relu');
cnn1 = cnnAddPoolLayer(cnn1, 'max', [2, 2]);
cnn1 = cnnAddConvLayer(cnn1, [3, 3], 8, 'r');
cnn1 = cnnAddBNLayer(cnn1);
cnn1 = cnnAddActivationLayer(cnn1, 'relu');
cnn1 = cnnAddPoolLayer(cnn1, 'max', [2, 2]);
cnn1 = cnnAddConvLayer(cnn1, [3, 3], 8, 'r');
cnn1 = cnnAddBNLayer(cnn1);
cnn1 = cnnAddActivationLayer(cnn1, 'relu');
cnn1 = cnnAddPoolLayer(cnn1, 'max', [2, 2]);
cnn1 = cnnAddConvLayer(cnn1, [3, 3], 8, 'r');
cnn1 = cnnAddBNLayer(cnn1);
cnn1 = cnnAddActivationLayer(cnn1, 'relu');
cnn1 = cnnAddPoolLayer(cnn1, 'max', [2, 2]);
cnn1 = cnnAddReshapeLayer(cnn1);
cnn1 = cnnAddFCLayer(cnn1, 64, 'r');
cnn1 = cnnAddActivationLayer(cnn1, 'relu');
cnn1 = cnnAddOutputLayer(cnn1, 'end_BLOB');
cnn1 = cnnInitVelocity(cnn1);
% subnet 2: PCA
cnn2 = cnnInit(to);
cnn2 = cnnAddInputLayer(cnn2, [400, 144], 1);
cnn2 = cnnAddTransformLayer(cnn2, 'PCA', 8:25);
cnn2 = cnnAddConvLayer(cnn2, [5, 5], 8, 'r');
cnn2 = cnnAddBNLayer(cnn2);
cnn2 = cnnAddActivationLayer(cnn2, 'relu');
cnn2 = cnnAddPoolLayer(cnn2, 'max', [2, 2]);
cnn2 = cnnAddConvLayer(cnn2, [3, 3], 8, 'r');
cnn2 = cnnAddBNLayer(cnn2);
cnn2 = cnnAddActivationLayer(cnn2, 'relu');
cnn2 = cnnAddPoolLayer(cnn2, 'max', [2, 2]);
cnn2 = cnnAddConvLayer(cnn2, [3, 3], 8, 'r');
cnn2 = cnnAddBNLayer(cnn2);
cnn2 = cnnAddActivationLayer(cnn2, 'relu');
cnn2 = cnnAddPoolLayer(cnn2, 'max', [2, 2]);
cnn2 = cnnAddConvLayer(cnn2, [3, 3], 8, 'r');
cnn2 = cnnAddBNLayer(cnn2);
cnn2 = cnnAddActivationLayer(cnn2, 'relu');
cnn2 = cnnAddPoolLayer(cnn2, 'max', [2, 2]);
cnn2 = cnnAddReshapeLayer(cnn2);
cnn2 = cnnAddFCLayer(cnn2, 64, 'r');
cnn2 = cnnAddActivationLayer(cnn2, 'ReLu');
cnn2 = cnnAddOutputLayer(cnn2, 'end_BLOB');
cnn2 = cnnInitVelocity(cnn2);
% Combine
nets = {cnn1, cnn2};
cnn = cnnAddBLOBLayer(cnn, nets, 128, 2);
cnn = cnnAddFCLayer(cnn, 128, 'r');
cnn = cnnAddBNLayer(cnn);
cnn = cnnAddActivationLayer(cnn, 'relu');
cnn = cnnAddFCLayer(cnn, 64, 'r');
cnn = cnnAddBNLayer(cnn);
cnn = cnnAddActivationLayer(cnn, 'relu');
cnn = cnnAddFCLayer(cnn, 2, 'r');
cnn = cnnAddOutputLayer(cnn, 'softmax');
cnn = cnnInitVelocity(cnn);
%% Train CNN
[ERR, cnn] = cnnTrainBP(cnn, trainDataNoCarRe, trainLabelNoCarRe);
figure;
plot(ERR(1, :));
figure;
plot(ERR(2, :));
%% Test CNN
[acc, e] = cnnTestData(cnn, testDataNoCarRe, testLabelNoCarRe, 75);
fprintf('Validation accuracy is: %f\n', acc);
mpiprofile viewer;