NN Examples Matlab
NN Examples Matlab
Contents
1. nn02_neuron_output - Calculate the output of a simple neuron
11. nn06_rbfn_xor - Radial basis function networks for classification of XOR problem
13. nn08_tech_diag_pca - PCA for industrial diagnostic of compressor connection rod defects [data2.zip]
Page 1 of 91
Neuron output
Contents
● Define neuron parameters
% Neuron weights
w = [4 -2]
% Neuron bias
b = -3
% Activation function
func = 'tansig'
% func = 'purelin'
% func = 'hardlim'
% func = 'logsig'
w =
4 -2
b =
-3
func =
tansig
p = [2 3]
p =
2 3
activation_potential = p*w'+b
Page 2 of 91
neuron_output = feval(func, activation_potential)
activation_potential =
-1
neuron_output =
-0.7616
[p1,p2] = meshgrid(-10:.25:10);
z = feval(func, [p1(:) p2(:)]*w'+b );
z = reshape(z,length(p1),length(p2));
plot3(p1,p2,z)
grid on
xlabel('Input 1')
ylabel('Input 2')
zlabel('Neuron output')
Page 3 of 91
Custom networks
Contents
● Define one sample: inputs and outputs
● Configure network
inputs =
1
2
3
4
5
6
outputs =
1
2
% create network
net = network( ...
1, ... % numInputs, number of inputs,
2, ... % numLayers, number of layers
[1; 0], ... % biasConnect, numLayers-by-1 Boolean vector,
[1; 0], ... % inputConnect, numLayers-by-numInputs Boolean matrix,
[0 0; 1 0], ... % layerConnect, numLayers-by-numLayers Boolean matrix
[0 1] ... % outputConnect, 1-by-numLayers Boolean vector
);
Page 4 of 91
Define topology and transfer function
Configure network
net = configure(net,inputs,outputs);
view(net);
Page 5 of 91
% initial network response without training
initial_output = net(inputs)
% network training
net.trainFcn = 'trainlm';
net.performFcn = 'mse';
net = train(net,inputs,outputs);
initial_output =
0
0
final_output =
1.0000
2.0000
Page 6 of 91
Classification of linearly separable data with a perceptron
PROBLEM DESCRIPTION: Two clusters of data, belonging to two classes, are defined in a 2-dimensional input space. Classes are
linearly separable. The task is to construct a Perceptron for the classification of data.
Contents
● Define input and output data
Page 7 of 91
Create and train perceptron
net = perceptron;
net = train(net,x,y);
view(net);
figure(1)
plotpc(net.IW{1},net.b{1});
Page 8 of 91
Published with MATLAB® 7.14
Page 9 of 91
Classification of a 4-class problem with a perceptron
PROBLEM DESCRIPTION: Perceptron network with 2-inputs and 2-outputs is trained to classify input vectors into 4 categories
Contents
● Define data
● Create a perceptron
● Train a perceptron
Define data
% define classes
q = .6; % offset of classes
A = [rand(1,K)-q; rand(1,K)+q];
B = [rand(1,K)+q; rand(1,K)+q];
C = [rand(1,K)+q; rand(1,K)-q];
D = [rand(1,K)-q; rand(1,K)-q];
% plot classes
plot(A(1,:),A(2,:),'bs')
hold on
grid on
plot(B(1,:),B(2,:),'r+')
plot(C(1,:),C(2,:),'go')
plot(D(1,:),D(2,:),'m*')
% text labels for classes
text(.5-q,.5+2*q,'Class A')
text(.5+q,.5+2*q,'Class B')
text(.5+q,.5-2*q,'Class C')
text(.5-q,.5-2*q,'Class D')
Create a perceptron
net = perceptron;
Train a perceptron
ADAPT returns a new network object that performs as a better classifier, the network output, and the error. This loop allows the
network to adapt for xx passes, plots the classification line, and continues until the error is zero.
Page 11 of 91
E = 1;
net.adaptParam.passes = 1;
linehandle = plotpc(net.IW{1},net.b{1});
n = 0;
while (sse(E) & n<1000)
n = n+1;
[net,Y,E] = adapt(net,P,T);
linehandle = plotpc(net.IW{1},net.b{1},linehandle);
drawnow;
end
% show perceptron structure
view(net);
Page 12 of 91
How to use trained perceptron
p =
0.7000
1.2000
y =
1
1
Page 13 of 91
ADALINE time series prediction
PROBLEM DESCRIPTION: Construct an ADALINE for adaptive prediction of time series based on past time series data
Contents
● Define input and output data
● Plot results
Page 14 of 91
Prepare data for neural network toolbox
% There are two basic types of input vectors: those that occur concurrently
% (at the same time, or in no particular time sequence), and those that
% occur sequentially in time. For concurrent vectors, the order is not
% important, and if there were a number of networks running in parallel,
% you could present one input vector to each of the networks. For
% sequential vectors, the order in which the vectors appear is important.
p = con2seq(y);
% The resulting network will predict the next value of the target signal
% using delayed values of the target.
inputDelays = 1:5; % delayed inputs to be used
learning_rate = 0.2; % learning rate
% define ADALINE
net = linearlayer(inputDelays,learning_rate);
Page 15 of 91
% before the next step in the sequence is presented. Thus the network is
% updated N times. The output signal and the error signal are returned,
% along with new network.
[net,Y,E] = adapt(net,p,p);
Plot results
% first graph
subplot(211)
plot(t,y,'b', t,Y,'r--');
legend('Original','Prediction')
grid on
xlabel('Time [sec]');
ylabel('Target Signal');
ylim([-1.2 1.2])
% second graph
subplot(212)
plot(t,E,'g');
grid on
Page 16 of 91
legend('Prediction error')
xlabel('Time [sec]');
ylabel('Error');
ylim([-1.2 1.2])
Page 17 of 91
Solving XOR problem with a multilayer perceptron
PROBLEM DESCRIPTION: 4 clusters of data (A,B,C,D) are defined in a 2-dimensional input space. (A,C) and (B,D) clusters represent XOR classification problem. The task is
to define a neural network for solving the XOR problem.
Contents
● Define 4 clusters of input data
● plot targets and network response to see how good the network learns the data
Page 18 of 91
Define output coding for XOR problem
% train net
net.divideParam.trainRatio = 1; % training set [%]
net.divideParam.valRatio = 0; % validation set [%]
net.divideParam.testRatio = 0; % test set [%]
% show network
view(net)
Page 19 of 91
plot targets and network response to see how good the network learns the data
figure(2)
plot(T','linewidth',2)
hold on
plot(Y','r--')
grid on
legend('Targets','Network response','location','best')
ylim([-1.25 1.25])
% generate a grid
span = -1:.005:2;
[P1,P2] = meshgrid(span,span);
pp = [P1(:) P2(:)]';
Page 20 of 91
view(2)
Page 21 of 91
Classification of a 4-class problem with a multilayer perceptron
PROBLEM DESCRIPTION: 4 clusters of data (A,B,C,D) are defined in a 2-dimensional input space. The task is to define a neural network for classification of arbitrary point in
the 2-dimensional space into one of the classes (A,B,C,D).
Contents
● Define 4 clusters of input data
Page 22 of 91
Define output coding for all 4 clusters
% train net
net.divideParam.trainRatio = 1; % training set [%]
net.divideParam.valRatio = 0; % validation set [%]
net.divideParam.testRatio = 0; % test set [%]
% show network
view(net)
Page 23 of 91
Evaluate network performance and plot results
Page 24 of 91
Plot classification result for the complete input space
% generate a grid
span = -1:.01:2;
[P1,P2] = meshgrid(span,span);
pp = [P1(:) P2(:)]';
Page 25 of 91
Published with MATLAB® 7.14
Page 26 of 91
Industrial diagnostic of compressor connection rod defects
PROBLEM DESCRIPTION: Industrial production of compressors suffers from problems during the imprinting operation where a
connection rod is connected with a compressor head. Irregular imprinting can cause damage or crack of the connection rod which
results in damaged compressor. Such compressors should be eliminated from the production line but defects of this type are difficult
to detect. The task is to detect crack and overload defects from the measurement of the imprinting force.
Contents
● Photos of the broken connection rod
● Application
Page 27 of 91
Load and plot data
% industrial data
load data2.mat
whos
Page 29 of 91
Prepare inputs: Data resampling
Page 30 of 91
% include only every step-th data
step = 10;
force = force(:,1:step:size(force,2));
whos
Page 31 of 91
Page 32 of 91
Define binary output coding: 0=OK, 1=Error
Page 33 of 91
% find percentage of correct classifications
correct_classifications = 100*length(find(Y==target))/length(target)
correct_classifications =
99.7500
Application
% get sample
random_index = randi(length(force))
sample = force(random_index,:);
% plot sample
figure
plot(force','c')
grid on, hold on
plot(sample,'b')
xlabel('Time')
ylabel('Force')
% predict quality
q = net(sample');
% digitize network response
q = double(q > threshold)'
random_index =
1881
q =
0
Page 34 of 91
Published with MATLAB® 7.14
Page 35 of 91
Prediction of chaotic time series with NAR neural network
PROBLEM DESCRIPTION: Design a neural network for the recursive prediction of chaotic Mackay-Glass time series, try various network architectures and experiment with various delays.
Contents
● Generate data (Mackay-Glass time series)
● Prepare input and target time series data for network training
● Train net
% data settings
N = 700; % number of samples
Nu = 300; % number of learning samples
b = 0.1;
c = 0.2;
tau = 17;
% initialization
y = [0.9697 0.9699 0.9794 1.0003 1.0319 1.0703 1.1076 1.1352 1.1485 ...
1.1482 1.1383 1.1234 1.1072 1.0928 1.0820 1.0756 1.0739 1.0759]';
% generate Mackay-Glass time series
for n=18:N+99
y(n+1) = y(n) - b*y(n) + c*y(n-tau)/(1+y(n-tau).^10);
end
% remove initial values
y(1:100) = [];
Page 36 of 91
Define nonlinear autoregressive neural network
Prepare input and target time series data for network training
% [Xs,Xi,Ai,Ts,EWs,shift] = preparets(net,Xnf,Tnf,Tf,EW)
%
% This function simplifies the normally complex and error prone task of
% reformatting input and target timeseries. It automatically shifts input
% and target time series as many steps as are needed to fill the initial
% input and layer delay states. If the network has open loop feedback,
% then it copies feedback targets into the inputs as needed to define the
% open loop inputs.
%
% net : Neural network
% Xnf : Non-feedback inputs
% Tnf : Non-feedback targets
% Tf : Feedback targets
% EW : Error weights (default = {1})
%
% Xs : Shifted inputs
% Xi : Initial input delay states
% Ai : Initial layer delay states
% Ts : Shifted targets
[Xs,Xi,Ai,Ts] = preparets(net,{},{},yt);
Train net
Page 37 of 91
Transform network into a closed-loop NAR network
% validation data
Yv = cell2mat(yv);
% prediction
Yp = cell2mat(predict);
% error
e = Yv - Yp;
Page 38 of 91
Published with MATLAB® 7.14
Page 39 of 91
Function approximation with RBFN
PROBLEM DESCRIPTION: Create a function approximation model based on a measured data set. Apply various Neural Network architectures based on Radial Basis
Functions. Compare with Multilayer perceptron and Linear regression models.
Contents
● Linear Regression
● Exact RBFN
● RBFN
● GRNN
● MLP
● Data generator
Linear Regression
% generate data
[X,Xtrain,Ytrain,fig] = data_generator();
%---------------------------------
% no hidden layers
net = feedforwardnet([]);
% % one hidden layer with linear transfer functions
% net = feedforwardnet([10]);
% net.layers{1}.transferFcn = 'purelin';
% view net
view (net)
% simulate a network over complete input range
Y = net(X);
% plot network response
figure(fig)
plot(X,Y,'color',[1 .4 0])
legend('original function','available data','Linear regression','location','northwest')
Page 40 of 91
Exact RBFN
% generate data
[X,Xtrain,Ytrain,fig] = data_generator();
%---------------------------------
% choose a spread constant
spread = .4;
% create a neural network
net = newrbe(Xtrain,Ytrain,spread);
%---------------------------------
% view net
view (net)
% simulate a network over complete input range
Y = net(X);
% plot network response
figure(fig)
plot(X,Y,'r')
legend('original function','available data','Exact RBFN','location','northwest')
Page 41 of 91
RBFN
% generate data
[X,Xtrain,Ytrain,fig] = data_generator();
%---------------------------------
% choose a spread constant
spread = .2;
% choose max number of neurons
K = 40;
% performance goal (SSE)
goal = 0;
% number of neurons to add between displays
Ki = 5;
% create a neural network
net = newrb(Xtrain,Ytrain,goal,spread,K,Ki);
%---------------------------------
% view net
view (net)
% simulate a network over complete input range
Y = net(X);
% plot network response
figure(fig)
plot(X,Y,'r')
legend('original function','available data','RBFN','location','northwest')
Page 42 of 91
GRNN
% generate data
[X,Xtrain,Ytrain,fig] = data_generator();
%---------------------------------
% choose a spread constant
Page 43 of 91
spread = .12;
% create a neural network
net = newgrnn(Xtrain,Ytrain,spread);
%---------------------------------
% view net
view (net)
% simulate a network over complete input range
Y = net(X);
% plot network response
figure(fig)
plot(X,Y,'r')
legend('original function','available data','RBFN','location','northwest')
% generate data
[X,Xtrain,Ytrain,fig] = data_generator();
Page 45 of 91
MLP
% generate data
[X,Xtrain,Ytrain,fig] = data_generator();
%---------------------------------
% create a neural network
net = feedforwardnet([12 6]);
% set early stopping parameters
net.divideParam.trainRatio = 1.0; % training set [%]
net.divideParam.valRatio = 0.0; % validation set [%]
net.divideParam.testRatio = 0.0; % test set [%]
% train a neural network
net.trainParam.epochs = 200;
net = train(net,Xtrain,Ytrain);
%---------------------------------
% view net
view (net)
% simulate a network over complete input range
Y = net(X);
% plot network response
figure(fig)
plot(X,Y,'color',[1 .4 0])
legend('original function','available data','MLP','location','northwest')
Page 46 of 91
Data generator
type data_generator
% data generator
X = 0.01:.01:10;
f = abs(besselj(2,X*7).*asind(X/2) + (X.^1.95)) + 2;
fig = figure;
plot(X,f,'b-')
hold on
grid on
Page 47 of 91
Page 48 of 91
Radial Basis Function Networks for Classification of XOR problem
PROBLEM DESCRIPTION: 4 clusters of data (A,B,C,D) are defined in a 2-dimensional input space. (A,C) and
(B,D) clusters represent XOR classification problem. The task is to define a neural network for solving the XOR
problem.
Contents
1. Classification of XOR problem with an exact RBFN
Page 49 of 91
Classification of XOR problem with an exact RBFN
PROBLEM DESCRIPTION: 2 groups of linearly inseparable data (A,B) are defined in a 2-dimensional input space. The task is to
define a neural network for solving the XOR classification problem.
Contents
● Create input data
Page 50 of 91
Define output coding
% view network
view(net)
Page 51 of 91
Warning: Rank deficient, rank = 124, tol = 8.881784e-14.
Spread = 1.00
Num of neurons = 400
Correct class = 100.00 %
Page 52 of 91
Plot classification result
% generate a grid
span = -1:.025:2;
[P1,P2] = meshgrid(span,span);
pp = [P1(:) P2(:)]';
% simualte neural network on a grid
aa = sim(net,pp);
Page 53 of 91
Plot RBFN centers
plot(net.iw{1}(:,1),net.iw{1}(:,2),'gs')
Page 54 of 91
Published with MATLAB® 7.14
Page 55 of 91
Classification of XOR problem with a RBFN
PROBLEM DESCRIPTION: 2 groups of linearly inseparable data (A,B) are defined in a 2-dimensional input space. The task is to
define a neural network for solving the XOR classification problem.
Contents
● Create input data
● Create a RBFN
Page 56 of 91
Define output coding
Create a RBFN
% NEWRB algorithm
% The following steps are repeated until the network's mean squared error
% falls below goal:
% 1. The network is simulated
% 2. The input vector with the greatest error is found
% 3. A radbas neuron is added with weights equal to that vector
% 4. The purelin layer weights are redesigned to minimize error
Page 57 of 91
spread = 2;
% choose max number of neurons
K = 20;
% performance goal (SSE)
goal = 0;
% number of neurons to add between displays
Ki = 4;
% create a neural network
net = newrb(P,T,goal,spread,K,Ki);
% view network
view(net)
Page 58 of 91
Evaluate network performance
Spread = 2.00
Num of neurons = 20
Correct class = 99.50 %
Page 59 of 91
Plot classification result
% generate a grid
span = -1:.025:2;
[P1,P2] = meshgrid(span,span);
pp = [P1(:) P2(:)]';
% simualte neural network on a grid
aa = sim(net,pp);
Page 60 of 91
Plot RBFN centers
plot(net.iw{1}(:,1),net.iw{1}(:,2),'gs')
Page 61 of 91
Published with MATLAB® 7.14
Page 62 of 91
Classification of XOR problem with a PNN
PROBLEM DESCRIPTION: 2 groups of linearly inseparable data (A,B) are defined in a 2-dimensional input space. The task is to
define a neural network for solving the XOR classification problem.
Contents
● Create input data
● Create a PNN
Page 63 of 91
Define output coding
Create a PNN
% view network
view(net)
Page 64 of 91
Evaluate network performance
Spread = 0.50
Num of neurons = 400
Correct class = 100.00 %
Page 65 of 91
Plot classification result for the complete input space
% generate a grid
span = -1:.025:2;
[P1,P2] = meshgrid(span,span);
pp = [P1(:) P2(:)]';
% simualte neural network on a grid
aa = sim(net,pp);
aa = vec2ind(aa)-1.5; % convert
Page 66 of 91
plot PNN centers
plot(net.iw{1}(:,1),net.iw{1}(:,2),'gs')
Page 67 of 91
Published with MATLAB® 7.14
Page 68 of 91
Classification of XOR problem with a GRNN
PROBLEM DESCRIPTION: 2 groups of linearly inseparable data (A,B) are defined in a 2-dimensional input space. The task is to
define a neural network for solving the XOR classification problem.
Contents
● Create input data
● Create a GRNN
Page 69 of 91
Define output coding
Create a GRNN
% view network
view(net)
Page 70 of 91
Evaluate network performance
Spread = 0.20
Num of neurons = 400
Correct class = 100.00 %
Page 71 of 91
Plot classification result
% generate a grid
span = -1:.025:2;
[P1,P2] = meshgrid(span,span);
pp = [P1(:) P2(:)]';
% simualte neural network on a grid
aa = sim(net,pp);
Page 72 of 91
plot GRNN centers
plot(net.iw{1}(:,1),net.iw{1}(:,2),'gs')
Page 73 of 91
Published with MATLAB® 7.14
Page 74 of 91
Bayesian regularization for RBFN
PROBLEM DESCRIPTION: 2 groups of linearly inseparable data (A,B) are defined in a 2-dimensional input space. The task is to define a
neural network for solving the XOR classification problem.
Contents
● Create input data
● Create a RBFN
Page 75 of 91
Define output coding
Create a RBFN
% view network
Page 76 of 91
view(net)
Page 77 of 91
% calculate [%] of correct classifications
correct = 100 * length(find(T.*Y > 0)) / length(T);
fprintf('\nSpread = %.2f\n',spread)
fprintf('Num of neurons = %d\n',net.layers{1}.size)
fprintf('Correct class = %.2f %%\n',correct)
% plot targets and network response to see how good the network learns the data
figure;
plot(T')
ylim([-2 2])
set(gca,'ytick',[-2 0 2])
hold on
grid on
plot(Y','r')
legend('Targets','Network response')
xlabel('Sample No.')
actual_spread =
8.3255
8.3255
8.3255
8.3255
8.3255
8.3255
8.3255
8.3255
8.3255
8.3255
Spread = 0.10
Num of neurons = 10
Correct class = 79.50 %
Page 78 of 91
Plot classification result
% generate a grid
span = -1:.025:2;
[P1,P2] = meshgrid(span,span);
pp = [P1(:) P2(:)]';
% simualte neural network on a grid
aa = sim(net,pp);
Page 79 of 91
Retrain a RBFN using Bayesian regularization backpropagation
Page 80 of 91
xlabel('Sample No.')
spread_after_training =
2.9924
3.0201
0.7809
0.5933
2.6968
2.8934
2.2121
2.9748
2.7584
3.5739
Num of neurons = 10
Correct class = 100.00 %
Page 81 of 91
% Plot modified RBFN centers
plot(net.iw{1}(:,1),net.iw{1}(:,2),'rs','linewidth',2)
Page 82 of 91
1D and 2D Self Organized Map
PROBLEM DESCRIPTION: Define 1-dimensional and 2-dimensional SOM networks to represent the 2-dimensional input space.
Contents
● Define 4 clusters of input data
Page 83 of 91
Create and train 1D-SOM
% SOM parameters
dimensions = [100];
coverSteps = 100;
initNeighbor = 10;
topologyFcn = 'gridtop';
distanceFcn = 'linkdist';
% define net
net1 = selforgmap(dimensions,coverSteps,initNeighbor,topologyFcn,distanceFcn);
% train
[net1,Y] = train(net1,P);
Page 84 of 91
Create and train 2D-SOM
% SOM parameters
dimensions = [10 10];
coverSteps = 100;
initNeighbor = 4;
topologyFcn = 'hextop';
distanceFcn = 'linkdist';
% define net
net2 = selforgmap(dimensions,coverSteps,initNeighbor,topologyFcn,distanceFcn);
% train
[net2,Y] = train(net2,P);
% plot for each SOM neuron the number of input vectors that it classifies
figure
plotsomhits(net2,P)
Page 85 of 91
Page 86 of 91
Published with MATLAB® 7.14
Page 87 of 91
PCA for industrial diagnostic of compressor connection rod defects
PROBLEM DESCRIPTION: Industrial production of compressors suffers from problems during the imprinting operation where a connection rod is connected with a
compressor head. Irregular imprinting can cause damage or crack of the connection rod which results in damaged compressor. Such compressors should be eliminated from
the production line but defects of this type are difficult to detect. The task is to detect crack and overload defects from the measurement of the imprinting force.
Contents
● Photos of the broken connection rod
% industrial data
load data2.mat
whos
% show data
figure
plot(force(find(target==1),:)','b') % OK (class 1)
grid on, hold on
plot(force(find(target>1),:)','r') % NOT OK (class 2 & 3)
xlabel('Time')
ylabel('Force')
Page 88 of 91
Prepare inputs by PCA
ps2 =
name: 'processpca'
xrows: 100
maxfrac: 0.1000
yrows: 2
transform: [2x100 double]
no_change: 0
Name Size Bytes Class Attributes
Page 89 of 91
force2 2000x2 32000 double
% show net
view(net)
Page 90 of 91
threshold = 0.5;
Y = double(Y > threshold)';
figure(2)
a = axis;
% generate a grid, expand input space
xspan = a(1)-10 : .1 : a(2)+10;
yspan = a(3)-10 : .1 : a(4)+10;
[P1,P2] = meshgrid(xspan,yspan);
pp = [P1(:) P2(:)]';
% simualte neural network on a grid
aa = sim(net,pp);
aa = double(aa > threshold);
Page 91 of 91