How to Train a Nonlinear input-output Neural Network for prediction using multiple sequences containing multiple variables?

12 views (last 30 days)
I'm trying to train a Nonlinear input-output Neural Network (using a Time delay neural network) utilizing a dataset with multiple training sequences (100), each element of this sequence containing 24 parameters each. The longest sequence among the 100 has 200 cycles, so I padded all the other sequences with NaNs up to 200 cycles as well.
I'm using this for predicting the raiming useful life cycle of engines (Is this the most appropriate tool for this case?). There are 100 engines and each one contains 24 parameters. The longest engine works for 200 cycles.
My question is: How should I organize this data in order to feed the Time delay neural network?
I have organized my input matrix like this:
time_series_for_all_engines_train =
{{Engine1_Time001 Engine2_Time001 Engine2_Time001 . . . Engine100_Time001},
{Engine1_Time002 Engine2_Time002 Engine2_Time002 . . . Engine100_Time002},
{Engine1_Time003 Engine2_Time003 Engine2_Time003 . . . Engine100_Time003}, ...
... {Engine1_Time200 Engine2_Time200 Engine2_Time200 . . . Engine100_Time200}};
A 1x200 Cell Array where each cell is a 24x100 Matrix containing 24 parameters for each of the engines at that cycle/time.
As a Target array, I also have a 1x200 Cell Array here each cell is a 1x100 Matrix containing the Remaining Useful Life (RUL) Time of the Engine X at cycle Y.
remaining_cycles_until_failure =
{{RUL_Engine1_Time001 RUL_Engine2_Time001 RUL_Engine3_Time001 . . . RUL_Engine100_Time001},
{RUL_Engine1_Time002 RUL_Engine2_Time002 RUL_Engine3_Time002 . . . RUL_Engine100_Time002},
{RUL_Engine1_Time003 RUL_Engine2_Time003 RUL_Engine3_Time003 . . . RUL_Engine100_Time003}, ...
... {RUL_Engine1_Time200 RUL_Engine2_Time200 RUL_Engine3_Time200 . . . RUL_Engine100_Time200}}
In this case, each cell is a single integer containing the RUL for each of the engines at that cycle/time.
A piece of the code I'm using is this:
neural_network = timedelaynet(1:input_delay,number_of_hidden_layers);
[Xs,Xi,Ai,T] = preparets(neural_network,time_series_for_all_engines_train,remaining_cycles_until_failure);
neural_network = train(neural_network,Xs,T,Xi,Ai);
[Y,Xf,Af] = neural_network(Xs,Xi,Ai);
[neural_network_closed,Xic,Aic] = closeloop(neural_network,Xf,Af);
[predicted_future_samples_y,xf,af] = neural_network_closed(future_samples_x,past_samples_x,Aic);
And I managed to get these results:
The predicted RUL is not even close to the real one.
Any thoughts on this? Am I training the network correctly?
  1 Comment
Torsten K
Torsten K on 15 Oct 2020
Hi Matheus,
maybe you need to retrain the closed-loop network for improving the results:
% Your Code
neural_network = timedelaynet(1:input_delay,number_of_hidden_layers);
[Xs,Xi,Ai,T] = preparets(neural_network,time_series_for_all_engines_train,remaining_cycles_until_failure);
neural_network = train(neural_network,Xs,T,Xi,Ai);
[Y,Xf,Af] = neural_network(Xs,Xi,Ai);
[neural_network_closed,Xic,Aic] = closeloop(neural_network,Xf,Af);
[predicted_future_samples_y,xf,af] = neural_network_closed(future_samples_x,past_samples_x,Aic);
% New Code (untested)
[Xcs,Xci,Aci,Tc] = preparets(neural_network_closed,time_series_for_all_engines_train,remaining_cycles_until_failure);
[netc,trc] = train(neural_network_closed,Xcs,Tc,Xci,Aci);
Another question is: how did you divide your data?
Best regards
Torsten

Sign in to comment.

Answers (0)

Categories

Find more on Predict Remaining Useful Life (RUL) in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!