Neural network with softmax output function giving sum(output)~=1

2 views (last 30 days)
Hi, I have an issue with training neural network with softmax output transferFcn. I have trained NN using code appended below:
net = feedforwardnet(6,'trainscg');
net.layers{2}.transferFcn='softmax';
net.trainParam.epochs = 100;
net.divideParam.trainRatio = 1.0;
net.divideParam.testRatio = 0.0;
net.divideParam.valRatio = 0.0;
net.trainParam.lr = 0.1;
net.trainParam.goal = 0.001;
net.trainParam.showWindow=0;
net = train(net,normX',outputLabels); %
where normX = 26,000 X 7 and outputLabels = 2 X 26,000. Output can be 0 or 1.
when I simulate network with same input data, I am getting output for 2 output units in the range of [0,1] but their sum is not equal to one. I have read and have also searched on web that using softmax one can get sum(output activation) = 1.
Please help me with this issue. Let me know if you need further information.
Thanks Regards Anshul

Accepted Answer

Greg Heath
Greg Heath on 24 Apr 2014
There appears to be a bug in MATLAB's softmax. Before MATLAB introduced their version I coded my own. I lost it when my computer crashed and do not remember if I ever replaced it. If interested, You can search in COMP.AI.NEURAL-NETS, COMP.SOFT-SYS.MATLAB and ANSWERS and GOOGLE using
greg softmax
OR you can try to debug the current version.
I do not have time to chase it down. However, I do not see that you used the crossentropy performance function instead of mean-square-error.
  3 Comments
Anshul Gupta
Anshul Gupta on 25 Apr 2014
Hey Greg,
I found the problem.
The implementation for softmax is correct but Matlab by default puts a processing function in the output layer (mapminmax), which was actually giving the problem. When I removed it, as my output was already between 0 and 1, I am getting output activation as desired.
Anyway Thanks for your help.
Regards
Anshul
Antonio Mendes
Antonio Mendes on 5 May 2020
Anshul Gupta thanks for reporting what the problem is. I was experiencing the same problem today. Thank you.

Sign in to comment.

More Answers (2)

wang
wang on 9 Dec 2018
how to remove it?

reza
reza on 27 Sep 2019
Hi,
You may use the followwing command line:
net.outputs{end}.processFcns={};

Community Treasure Hunt

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

Start Hunting!