neural network poor performance
7 次查看(过去 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!