ff_cerchio.m

ff_cerchio.m

Descrizione

Questo programma MATLAB crea un certo numero di punti (es. 5000) su un piano cartesiano quadrato di lato 1.
La rete neurale riconosce quali di questi punti stanno all'interno del cerchio di origine (0, 0) e raggio 0,5.
ff_cerchio_plot.png

N = 1000 % dimensione campione esempi
r = 0.5

x = rand(1, N)*2 - 1;
y = rand(1, N)*2 - 1;

% indici dei punti appartenenti ad un cerchio di raggio r
kk = find(sqrt(x.^2 + y.^2)<r);

% mostra grafico situazione
%%plot(x, y, '.', x(kk), y(kk), '.')

% matrice dei neuroni di input (2 x N)
P = [x; y];

% creiamo il vettore Target (degli output corretti)
T = zeros(1, N);
T(kk) = 1; % imposta a 1 gli indici corrispondenti ai punti nel cerchio

% creiamo una rete sugli esempi P di output T, con 4 neuroni nascosto
% lasciando gli altri parametri a MATLAB
net = newff(P, T, 4);

% la rete non addestrata risponde così
Y = sim(net, P);
zeri = find(Y < 0.5);
uni = find(Y > 0.5);
Y(zeri) = 0;
Y(uni) = 1;

% come vede il mondo la rede non addestrata?
%%plot(x(uni), y(uni), '.')

% ora facciamo l'addestramento
net = train(net, P, T);

% creiamo un insieme di test
xtest = rand(1, round(N/3))*2 - 1
ytest = rand(1, round(N/3))*2 - 1
test = [xtest;  ytest];

% testiamo la rete sull'insieme di test
Z = sim(net, test);
Zeri = find(Z < 0.5);
Uni = find(Z > 0.5);

% disegnamo 3 tracce in uno stesso plot: esempi totali, esempi che la rete
% "giovane" classifica come 1 (>0.5), esempi che la "rete matura" classifica
% come 1 (>0.5)

plot(x, y, 'b.', x(uni), y(uni), 'r^', xtest(Uni), ytest(Uni), 'go')
% i risultati del test sono pallini vuoti verdi ('go')
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License