function [out1,out2]=fun_softmax(S) | |
% | |
% Column-wise normaliztion | |
% | |
[sz1,sz2]=size(S); | |
A=zeros(sz1,sz2); | |
B=zeros(sz1-1,sz1,sz2); | |
for zz=1:sz2 | |
[aaa,bbb]=softmax(S(:,zz)); | |
A(:,zz)=aaa; | |
B(:,:,zz)=bbb; | |
end | |
out1=A; | |
out2=B; | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
function [y,dy]=softmax(S) | |
% bb=1e+2; | |
bb=1; | |
S=S/bb; | |
aa=exp(S); | |
sm=sum(exp(S))+1e-16; | |
y=aa./sm; | |
[n,~]=size(S); | |
m=n-1; | |
dy=zeros(m,n); | |
for i=1:m | |
for j=1:n | |
if j~=i | |
dy(i,j)=-exp(S(i)).*exp(S(j)); | |
else | |
dy(i,j)=exp(S(i)).*sm-exp(S(i)).*exp(S(j)); | |
end | |
end | |
end | |
dy=dy/sm^2/bb; | |
end | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
end |