MATLAB Answers

What to do when training doesn't fit training data well?

4 views (last 30 days)
Jordan Pauls
Jordan Pauls on 28 May 2020
Answered: Nagasai Bharat on 29 Sep 2020
Hello,
I've been working on a Deep Learning system to learn some simple communication system properties and I'm having trouble with training/predicting. First, the training process quickly goes to zero, which would indicate that it has fit the data well, or even overfit the training data.
However, when using the predict function on the training data to double check, the plot indicates that the network does not predict the data well:
And cross validation prediction is even worse:
Does anyone have a guess as to why the training process shows an error close to zero, but both training set and cv set prediction is poor?
Thanks!

  3 Comments

Ryan Comeau
Ryan Comeau on 29 May 2020
Hey, can you be more specific please? What are uo attempting to train? How large is your data set? Which training options have you selected?
Jordan Pauls
Jordan Pauls on 29 May 2020
Hi,
I'm attempting to train a Deep Neural Network for calculating a wireless channel covariance matrix based on a channel conditions matrix. For training examples, the input I'm using is randn(Rx,Tx), and the output is a slightly modified Singular Value Decomposition of the input.
The network is built with the following:
layers_1 = [
imageInputLayer(Input_Layer_Size,'Name','SeqInput') %36 input features
fullyConnectedLayer(128,"Name","fc_1")
reluLayer("Name","relu_1")
fullyConnectedLayer(128,"Name","fc_2")
reluLayer("Name","relu_2")
fullyConnectedLayer(128,"Name","fc_3")
reluLayer("Name","relu_3")
fullyConnectedLayer(128,"Name","fc_4")
reluLayer("Name","relu_4")
fullyConnectedLayer(128,"Name","fc_5")
reluLayer("Name","relu_5")
fullyConnectedLayer(64,"Name","fc_6")
fullyConnectedLayer(length(Output_Layer_Size),"Name","fc_7")
regressionLayer("Name","regressionoutput")];
with these training options:
options = trainingOptions('adam', ...
'InitialLearnRate',0.01,...
'LearnRateSchedule','piecewise', ...
'LearnRateDropFactor',0.8, ...
'LearnRateDropPeriod',10, ...
'MaxEpochs',50, ...
'MiniBatchSize',256, ...
'Plots','training-progress');
net1 = trainNetwork(Input_Train,Output_Train,layers_1,options);
So far I've tried training with 10,000 and 100,000 training examples and there doesn't seem to be a difference. I'm mainly wondering, why does training show such a low error almost immediately, but the network doesn't seem to fit the data well? Since the actual values are so small and the network outputs variables of type 'single', could it be a precision error?
vaibhav mishra
vaibhav mishra on 30 Jun 2020
maybe your model is getting overfit.
try to adopt some dropout and regularization in your model.

Sign in to comment.

Answers (2)

vaibhav mishra
vaibhav mishra on 30 Jun 2020
maybe your model is getting overfit.
try to adopt some dropout and regularization in your model.

  0 Comments

Sign in to comment.


Nagasai Bharat
Nagasai Bharat on 29 Sep 2020
Hi,
This issue may be mainly due to the overfitting of the data with respect to your model. As dropout is already applied while training you could use regularization methods (E.g. Batch Normalization, L2 Norm) to the model while training. Also, you could try altering the learning rate so that the model does not overfit.
You can refer to the following documentation and other similar training functions.

  0 Comments

Sign in to comment.

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!