Neural Networks in a loop with a condition

Hi everyone.
I am using a code to simulate an input output response using neural networks.
Then I want to calculate the error between the power_sim and power_obs, and I want to keep the neural networks keep simulating untill the error between power_sim and power_obs is less than a value X that already I fixed.
% Input
sheet1 = 1; xlRange1 = 'B2:B288'; ANN_Inputs = xlsread(filename,sheet1,xlRange1);
%Target
sheet1 = 1; xlRange1 = 'C2:C288'; ANN_Target = xlsread(filename,sheet1,xlRange1)';
% The neural networks model
net=feedforwardnet([10 15 5]);
net.divideParam.trainRatio=0.8;
net.divideParam.testRatio=0.1;
net.divideParam.valRatio=0.1;
net.trainParam.lr=0.001;
net.trainParam.min_grad=1e-20;
net.trainParam.goal=1e-3;
net.trainParam.epochs=1000;
net.trainParam.show=20;
net.trainParam.max_fail=1000;
net.trainFcn = 'trainlm';
net.trainParam.mu=0.01;
net=train(net,ANN_Inputs,ANN_Target);
net_output1=net(ANN_Inputs);
Obs=ANN_Target';
Sim=net_output1';
% Here I calculated power spectrum of the target
y1 = fft(ANN_Target');
y1(1) = [];
n1 = length(y1);
power_obs = abs(y1(1:floor(n1/2))).^2;
maxfreq1 = 1/2;
freq1 = (1:n1/2)/(n1/2)*maxfreq1;
period_obs = 1./freq1;
period_obs=period_obs';
% Power spectrum of simulated
y1 = fft(Sim);
y1(1) = [];
n1 = length(y1);
power_sim = abs(y1(1:floor(n1/2))).^2;
maxfreq1 = 1/2;
freq1 = (1:n1/2)/(n1/2)*maxfreq1;
period_sim = 1./freq1;
period_sim=period_sim';
% Then I want to calculate the error between the power_sim and power_obs, and I want to keep the neural networks running again
% untill the error between the two is less than a value X.

2 Comments

Such a threshold need not be a good idea. In fact, it arguably is rarely so.
Suppose your data is too noisy? That is, more noise then the threshold? Now even if you can fit the model and meet the threshold, then you will be overfitting the data, predicting noise. Or you may never be able to meet that threshold.
Suppose the threshold is too high? Now the fit would stop at a point before the model adequately represnets the signl in your data. You will be underfitting the data.
In either case, you are likely making a mistake, unless your choice for that threshold is perfectly on-target.
I don't know if I understand your answrr but my main request is that I want the neural networks to try to find the simulation that allow the error between the power_sim and power_obs is less than 90000. So how I can implement this in the code.

Sign in to comment.

Answers (1)

To accomplish this, you should establish a loop that keeps training your neural network until the discrepancy between "power_sim" and "power_obs" falls below a specified threshold (“X”). Below is a general framework for implementing this in MATLAB with the Deep Learning Toolbox.
% Training loop
while error >= error_threshold
% Train the network
[net, tr] = trainnet(net, input_data, power_obs);
% Simulate the network
power_sim = net(input_data);
% Calculate the mean squared error
error = perform(net, power_obs, power_sim);
% Display the current error
fprintf('Current error: %f\n', error);
end
To train an ANN, you can use the MATLAB “trainnet” function. For more details, please refer to the following MathWorks documentation.
I hope this will be helpful.

Categories

Find more on Deep Learning Toolbox in Help Center and File Exchange

Products

Release

R2022b

Asked:

on 15 Oct 2024

Answered:

on 28 Oct 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!