|
function []=fun_spoke_plot(vect_image,true_label,Ws,bs,spr,Wt,bt,tpr,nmb_of_labels) |
|
|
|
|
|
lb=true_label; |
|
nml=nmb_of_labels; |
|
nn=3; |
|
clr=colormap(cool(nn*(nml+1))); |
|
lbnm={'a','b','c','d','e','f','g','h','i','j','k','l','m','n',... |
|
'o','p','q','r','s','t','u','v','w','x','y','z'}; |
|
gy=.33; |
|
grdcl='w'; |
|
grlwt=2; |
|
msz=4; |
|
redge=1.1; |
|
|
|
figure(1) |
|
hold off |
|
|
|
subplot(1,2,1) |
|
prediction=fun_prediction(vect_image,Ws,bs); |
|
predicted=prediction.A_end; |
|
[~,nmd]=size(predicted); |
|
offst=.07; |
|
|
|
inc=2*pi/nml; |
|
tht=(0:(nml-1))*inc; |
|
A=zeros(2,nmb_of_labels); |
|
for ii=1:nml |
|
A(:,ii)=[tht(ii);1]; |
|
end |
|
radii=1./abs(prediction.predicted.distance+offst); |
|
|
|
pi_pt=zeros(2,nmd); |
|
for mm=1:nmd |
|
pi_pt(:,mm)=A*predicted(:,mm); |
|
end |
|
|
|
aa=pi_pt(1,:); |
|
theta_all=aa(:); |
|
|
|
|
|
|
|
|
|
|
|
for kk=1:nml |
|
idx=(lb==kk); |
|
theta=theta_all(idx); |
|
rho=radii(idx); |
|
|
|
p=polarplot(theta,rho/max(rho)); |
|
hold on |
|
|
|
p.Marker = 'square'; |
|
p.MarkerSize = msz; |
|
p.LineStyle = "none"; |
|
p.Color = clr(nn*kk,:); |
|
p.MarkerFaceColor = clr(nn*kk,:); |
|
end |
|
ax = gca; |
|
ax.RTickLabel = {}; |
|
ax.ThetaTick = rad2deg(tht); |
|
ax.ThetaTickLabel = lbnm; |
|
axis([-inf, inf, 0,redge]) |
|
set(ax,'Color',[gy gy gy]) |
|
set(ax,'GridColor',grdcl,'LineWidth',grlwt) |
|
|
|
|
|
title("SGD - trained Model (" + round(spr,2) + "%)",'fontsize',14) |
|
|
|
|
|
subplot(1,2,2) |
|
prediction=fun_prediction(vect_image,Wt,bt); |
|
predicted=prediction.A_end; |
|
[~,nmd]=size(predicted); |
|
|
|
|
|
inc=2*pi/nml; |
|
tht=(0:(nml-1))*inc; |
|
A=zeros(2,nmb_of_labels); |
|
for ii=1:nml |
|
A(:,ii)=[tht(ii);1]; |
|
end |
|
radii=1./abs(prediction.predicted.distance+offst); |
|
|
|
pi_pt=zeros(2,nmd); |
|
for mm=1:nmd |
|
pi_pt(:,mm)=A*predicted(:,mm); |
|
end |
|
|
|
aa=pi_pt(1,:); |
|
theta_all=aa(:); |
|
|
|
|
|
|
|
|
|
|
|
for kk=1:nml |
|
idx=(lb==kk); |
|
theta=theta_all(idx); |
|
rho=radii(idx); |
|
|
|
p=polarplot(theta,rho/max(rho)); |
|
hold on |
|
|
|
p.Marker = 'square'; |
|
p.MarkerSize = msz; |
|
p.LineStyle = "none"; |
|
p.Color = clr(nn*kk,:); |
|
p.MarkerFaceColor = clr(nn*kk,:); |
|
end |
|
ax = gca; |
|
ax.RTickLabel = {}; |
|
ax.ThetaTick = rad2deg(tht); |
|
ax.ThetaTickLabel = lbnm; |
|
axis([-inf, inf, 0,redge]) |
|
set(ax,'Color',[gy gy gy]) |
|
set(ax,'GridColor',grdcl,'LineWidth',grlwt) |
|
|
|
|
|
title("GDT - trained Model (" + tpr + "%)",'fontsize',14) |
|
|
|
set(gcf,'Position',[10 80 900 440]) |
|
|
|
|
|
sgtitle('Confusion Wheel for Training', 'fontsize', 16) |
|
|
|
function out=fun_prediction(vect_image,W, b) |
|
|
|
|
|
nmb_of_hidden_layers=length(fieldnames(W))-1; |
|
W1=W.LayerName1; |
|
W2=W.LayerName2; |
|
b1=b.LayerName1; |
|
b2=b.LayerName2; |
|
|
|
a_0=vect_image; |
|
|
|
|
|
nmb_labels=length(b2); |
|
z1=W1*a_0+b1; |
|
[a1,~]=fun_activation(z1); |
|
z2=W2*a1+b2; |
|
|
|
if nmb_of_hidden_layers==1 |
|
[a2,~]=fun_softmax(z2); |
|
predicted_vector=a2; |
|
else |
|
W3=W.LayerName3; |
|
b3=b.LayerName3; |
|
nmb_labels=length(b3); |
|
[a2,~]=fun_activation(z2); |
|
|
|
z3=W3*a2+b3; |
|
[a3,~]=fun_softmax(z3); |
|
predicted_vector=a3; |
|
end |
|
out.A_end=predicted_vector; |
|
out.predicted=fun_predicted_vector_2_label(predicted_vector,nmb_labels); |
|
end |
|
end |