| function out=fun_predicted_vector_2_label(vector,nmb_of_labels)
|
|
|
|
|
|
|
| [~,dtsz]=size(vector);
|
| digit=zeros(1,dtsz);
|
| distance=zeros(1,dtsz);
|
| nn=nmb_of_labels;
|
| v=vector(1:nn,:);
|
| I=eye(nn);
|
| vv=zeros(nn,1);
|
| for j=1:dtsz
|
| for i=1:nn
|
| [cc,~]=loss_function(v(:,j),I(:,i));
|
| vv(i)=cc;
|
| end
|
| [aa,idx]=min(vv);
|
| digit(j)=idx;
|
| distance(j)=aa;
|
| end
|
| out.label=digit;
|
| out.distance=distance;
|
|
|
| function [loss,dloss]=loss_function(predicted_x,true_y)
|
|
|
|
|
| eps=1e-8;
|
| [n, N]=size(true_y);
|
| loss=sum(sum((true_y+eps).*log((true_y+eps)./(predicted_x+eps))))/N;
|
|
|
| bb=-(true_y(1:end-1,:)+eps)./(predicted_x(1:end-1,:)+eps);
|
| w=bb+ones(n-1,1)*(true_y(end,:)+eps)./(predicted_x(end,:)+eps);
|
| dloss=w'/N;
|
| end
|
| %%%%%%%%%%
|
| end
|
| |