i want to optimize a neural network parameters by genetic algorithm and i get below code from matlab support, but the result is very poor even for a very simple function. how can i improve the result and is there any better code for my porpuse?
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
function mse_calc = mse_test(x, net, inputs, targets)
% 'x' contains the weights and biases vector
% in row vector form as passed to it by the
% genetic algorithm. This must be transposed
% when being set as the weights and biases
% vector for the network.
% To set the weights and biases vector to the
% one given as input
net = setwb(net, x');
% To evaluate the ouputs based on the given
% weights and biases vector
y = net(inputs);
% Calculating the mean squared error
mse_calc = sum(abs(y-targets)/length(y);
end
% INITIALIZE THE NEURAL NETWORK PROBLEM %
% inputs for the neural net
inputs = (-2:.01:2);
% targets for the neural net
targets = ((inputs).^2)-3;
% number of neurons
n = 4;
% create a neural network
net = feedforwardnet(n);
% configure the neural network for this dataset
net = configure(net, inputs, targets);
% create handle to the MSE_TEST function, that
% calculates MSE
h = @(x) mse_test(x, net, inputs, targets);
% Setting the Genetic Algorithms tolerance for
% minimum change in fitness function before
% terminating algorithm to 1e-8 and displaying
% each iteration's results.
ga_opts = gaoptimset('PopInitRange', [-1;1], 'TolFun', 1e-10,'display','iter');
ga_opts = gaoptimset(ga_opts, 'StallGenLimit', 100, 'FitnessLimit', 1e-5, 'Generations', 400);
% PLEASE NOTE: For a feed-forward network
% with n neurons, 3n+1 quantities are required
% in the weights and biases column vector.
% a. n for the input weights
% b. n for the input biases
% c. n for the output weights
% d. 1 for the output bias
% running the genetic algorithm with desired options
[x, err_ga] = ga(h, 3*n+1, ga_opts);
net = setwb(net, x');
0 commentaires
Réponse acceptée
Greg Heath
le 23 Sep 2016
If you can improve the code please let me know.
Greg
4 commentaires
Greg Heath
le 25 Sep 2016
Modifié(e) : Walter Roberson
le 25 Sep 2016
Walter,
I don't think so.
I think there is something wrong with the MATLAB code.
I have never seen it successfully demonstrated.
Greg
Darshana Abeyrathna
le 9 Oct 2016
Modifié(e) : Darshana Abeyrathna
le 9 Oct 2016
Saeed,
Please share if you have found any solution. Because I have the same problem :(
Plus de réponses (1)
Don Mathis
le 7 Juin 2017
Modifié(e) : Don Mathis
le 7 Juin 2017
In the code you posted, mse_test is not calculating mean squared error. Here is a corrected version that seems to work fine. Paste the whole thing into the MATLAB editor and run it:
% INITIALIZE THE NEURAL NETWORK PROBLEM %
% inputs for the neural net
inputs = (-2:.01:2);
% targets for the neural net
targets = ((inputs).^2)-3;
% number of neurons
n = 4;
% create a neural network
net = feedforwardnet(n);
% configure the neural network for this dataset
net = configure(net, inputs, targets);
% create handle to the MSE_TEST function, that
% calculates MSE
h = @(x) mse_test(x, net, inputs, targets);
% Setting the Genetic Algorithms tolerance for
% minimum change in fitness function before
% terminating algorithm to 1e-8 and displaying
% each iteration's results.
ga_opts = gaoptimset('PopInitRange', [-1;1], 'TolFun', 1e-10,'display','iter');
ga_opts = gaoptimset(ga_opts, 'StallGenLimit', 100, 'FitnessLimit', 1e-5, 'Generations', 400);
% PLEASE NOTE: For a feed-forward network
% with n neurons, 3n+1 quantities are required
% in the weights and biases column vector.
% a. n for the input weights
% b. n for the input biases
% c. n for the output weights
% d. 1 for the output bias
% running the genetic algorithm with desired options
[x, err_ga] = ga(h, 3*n+1, ga_opts);
net = setwb(net, x');
function mse_calc = mse_test(x, net, inputs, targets)
% 'x' contains the weights and biases vector in row vector form as passed
% to it by the genetic algorithm. This must be transposed when being set as
% the weights and biases vector for the network. To set the weights and
% biases vector to the one given as input
net = setwb(net, x');
% To evaluate the ouputs based on the given weights and biases vector
y = net(inputs);
% Calculating the mean squared error
mse_calc = sum((y-targets).^2)/length(y);
end
1 commentaire
Ammy
le 15 Mai 2018
I have a similar problem , I want to add an objective function in the above code that I want to optimize with Particle swarm optimization problem, Is there any way ?
Voir également
Catégories
En savoir plus sur Traveling Salesman (TSP) dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!