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