39 lines
883 B
Matlab
Executable File
39 lines
883 B
Matlab
Executable File
function [model, mse] = mlp(X, T, h)
|
|
% Train a multilayer perceptron neural network
|
|
% Input:
|
|
% X: d x n data matrix
|
|
% T: p x n response matrix
|
|
% h: L x 1 vector specify number of hidden nodes in each layer l
|
|
% Ouput:
|
|
% model: model structure
|
|
% mse: mean square error
|
|
% Written by Mo Chen (sth4nth@gmail.com).
|
|
eta = 1/size(X,2);
|
|
h = [size(X,1);h(:);size(T,1)];
|
|
L = numel(h);
|
|
W = cell(L-1,1);
|
|
for l = 1:L-1
|
|
W{l} = randn(h(l),h(l+1));
|
|
end
|
|
Z = cell(L,1);
|
|
Z{1} = X;
|
|
maxiter = 200;
|
|
mse = zeros(1,maxiter);
|
|
for iter = 1:maxiter
|
|
% forward
|
|
for l = 2:L
|
|
Z{l} = sigmoid(W{l-1}'*Z{l-1}); % 5.10, 5.49
|
|
end
|
|
% backward
|
|
E = T-Z{L};
|
|
mse(iter) = mean(dot(E,E),1);
|
|
for l = L-1:-1:1
|
|
df = Z{l+1}.*(1-Z{l+1});
|
|
dG = df.*E;
|
|
dW = Z{l}*dG';
|
|
W{l} = W{l}+eta*dW;
|
|
E = W{l}*dG;
|
|
end
|
|
end
|
|
mse = mse(1:iter);
|
|
model.W = W; |