neural network poor performance
조회 수: 6 (최근 30일)
이전 댓글 표시
Hello this is the first time I work with the neural network toolbox, I designed a network using newff, the goal is to approximate the input vector wich is a 4x600 matrix of MAV's taken from 4 muscles, to an output an expected angle.
I followed the instructions given at: http://www.mathworks.com/matlabcentral/answers/137-how-do-i-improve-my-neural-network-performance
however when I look at the regression plot, I'm getting a very low regression index, R=0.16882, the fit line it's almost horizontal and there is a lot of dispersion.
If someone could point me out in the right direction, I'd be gratefull.
Here is my code:
net = newff(Input,Target,20);
net.trainParam.goal=1e-6;
net.trainParam.max_fail=6;
net.performFcn='msereg';
net.performParam.ratio=0.5;
net,tr] = train(net,Input,Target);
yTargets = sim(net,Input);
plotregression(Target,yTargets);
댓글 수: 2
Hessam
2012년 1월 6일
I think you should change the parameter"net.divideFcn"to "dividerand". It's the default option for the nn when you do not specify the divide function explicitely. then you should use the following parameters to change the ratios of each part:
net.divideParam.trainRatio = 50/100;
net.divideParam.valRatio = 5/100;
net.divideParam.testRatio = 35/100;
However the validation check(the following parameter() is a very tricky part:
net.trainParam.max_fail
Hessam
채택된 답변
Greg Heath
2011년 12월 16일
Find, H, the smallest number of hidden nodes that will yield a satifactory design by looping over nH candidate values and trying Ntrials different designs for each value of H. Then choose the best of the nH*Ntrials designs.
I typically look at nH = 10, Ntrials = 10 first. Then accept or modify depending on the result.
Hope this helps.
Greg
댓글 수: 2
Greg Heath
2012년 1월 8일
>Thanks Greg, I have tried that too.
Hmm. Since that has ALWAYS worked for me, I would like to see your code.
Hope this helps.
Greg
추가 답변 (2개)
Mo al
2011년 12월 14일
you have to show your code. very quick suggestions 1- increase your performance goal. 2- initiate your network
댓글 수: 0
Hessam
2012년 1월 6일
Just as a very important point in my work: How does the Performance function calculate the "mse"? is it normalized? otherwise it would be useless.
댓글 수: 1
Greg Heath
2012년 1월 8일
MSE = mse(target-output)
It can be normalized by MSE00, the MSE obtained from the naive constant model:
output00 = repmat(mean(target,2),1,Ntrn)
MSE00 = mse(target-output00)
NMSE = MSE/MSE00 % normalized MSE
R2 = 1 - NMSE % R^2 statistic
Useless might be an appropriate characterization for multiple output
nets when the outputs have different scales. Therefore, if outputs have different scales, it would be wise to normalize them.
For regression with multiple real-valued outputs, I prefer standardization (zero-mean/unit-varance).
For classification among c classes, using targets that are columns of the c-dimensional unit matrix eye(c) is sufficient.
Hope this helps.
Greg
참고 항목
카테고리
Help Center 및 File Exchange에서 Sequence and Numeric Feature Data Workflows에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!