Neural Networks in a loop with a condition

20 visualizaciones (últimos 30 días)
Mahmoud Zemzami
Mahmoud Zemzami el 15 de Oct. de 2024
Respondida: Jaimin el 28 de Oct. de 2024 a las 5:48
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 comentarios
John D'Errico
John D'Errico el 15 de Oct. de 2024
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.
Mahmoud Zemzami
Mahmoud Zemzami el 16 de Oct. de 2024
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.

Iniciar sesión para comentar.

Respuestas (1)

Jaimin
Jaimin el 28 de Oct. de 2024 a las 5:48
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.

Categorías

Más información sobre Sequence and Numeric Feature Data Workflows en Help Center y File Exchange.

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by