Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

RELAZIONE SUL PROGETTO DI UN PERCEPTRON

tecnica



Relazione sul progetto di un

Perceptron




1. Descrizione del Perceptron


Il Perceptron è un neurone binario a soglia che è in grado di imparare mediante un paradigma di apprendimento "supervised". In pratica il Perceptron può essere considerato una rete neuronale multistrato a due strati. Il primo strato è costituito dagli n ingressi binari, il secondo strato è formato da un solo neurone di uscita. I pesi che connettono il primo strato all'uscita sono valori reali, l'uscita può assumere solo i valori binari 0,1. La soglia q del Perceptron può essere considerata come un ulteriore ingresso con valore costante -1  e un suo peso che lo connette a 212c23c l neurone di uscita.





Il paradigma di apprendimento del Perceptron è, come già detto, di tipo "Supervised", cioè supervisionato. Questo significa che alla rete, durante la fase di apprendimento, vengono fornite, insieme ai possibili ingressi, anche le uscite attese corrispondenti a tale ingresso. Mediante l'apprendimento supervised la rete è in grado di imparare esaltando quelle connessioni (quindi i relativi pesi) che contribuiscono ad un'uscita coerente con l'uscita desiderata e inibendo le connessioni che invece sono di ostacolo per un corretto riconoscimento.



h rappresenta il coefficiente di apprendimento della rete ed è un numero reale tra 0 e 1, tale coefficiente decide la velocità con cui la rete apprende; se troppo elevato c'è il rischio che si instaurino delle oscillazioni nella variazioni dei pesi e non si raggiunga uno stato stabile, se troppo basso l'apprendimento avviene troppo lentamente.

Un Perceptron con n ingressi ed una uscita, per la sua semplice natura, è in grado di discriminare al più due classi diverse, a condizione che le due classi siano linearmente separabili, ciò vale a dire che deve esistere un iperpiano di in grado di separare tutti i punti appartenenti ad una classe dai  punti appartenenti all'altra. Il Perceptron è dunque in grado, ad esempio, di riconoscere la forma AND o la forma OR, o le figure concave da quelle convesse, ma non può essere addestrato a riconoscere la forma XOR.

2. Descrizione della classe Percep e delle sue principali funzioni membro


Parte privata

Nella parte privata della classe perceptron sono contenuti: il coefficiente di apprendimento (eta), il numero di ingressi del perceptron (dim), una variabile che contiene l'uscita del perceptron (y) ed un puntatore a double (pesi) che viene utilizzato per costituire il vettore dei pesi.

Parte pubblica

perceptron(int Ning=2, double coeff=0.5)

È il costruttore della classe che, nel caso sia stato chiamato senza specificare il numero di ingressi e la soglia, utilizza il metodo degli argomenti di default costruendo un perceptron a due ingressi con coefficiente di apprendimento 0.5. Il costruttore crea un vettore di double delle dimensioni Ning che rappresentano i pesi delle connessioni dei neuroni di ingresso con il neurone di uscita. Il primo peso rappresenta il valore iniziale della soglia, gli altri pesi le connessioni con il neurone di uscita; tutti i pesi, mediante la funzione random( ), sono inizializzati a valori casuali.


~perceptron( )

Provvede a distruggere la parte dinamica della classe, cioè il vettore delle connessioni creato dal costruttore.


int calcolauscita(const int *ing)

Calcola e ritorna, mediante la formula vista a pagina 1, il valore dell'uscita del perceptron.


int addestra(const int *ing, const int yd)

Calcola il valore dell'uscita e in seguito (come effetto collaterale) ricalibra il vettore dei pesi in base alla differenza tra l'uscita calcolata (y) e quella desiderata dell'utente (yd). Ritorna il valore (y) dell'uscita calcolata.


double peso(int i)

Restituisce il valore della connessione desiderata (0 è la soglia, gli altri sono le connessioni tra i neuroni di ingresso e quello di uscita).

3. Implementazione del Percepetron


perceptron.h

class perceptron



perceptron.cc

#include <fstream.h>

#include <stdlib.h>

#include "percep.h"


perceptron::perceptron(int Ning=2, double coeff=0.5)



perceptron::~perceptron()



int perceptron::calcolauscita(const int *ing)



int perceptron::addestra(const int *ing, const int yd)



double perceptron::peso(int i)


4. Interfaccia per l'utilizzo del Percettrone


Mainper.cc è l'interfaccia che fa uso della classe perceptron. Durante l'esecuzione chiede il numero di ingressi e il valore del coefficiente di apprendimento all'utente e poi provvede a chiamare il costruttore del percptrone. Vediamo le funzioni principali del programma.


Addestra il Percettrone

Rappresenta la fase di apprendimento del percettrone: all'utente è chiesto di inserire il valore (binario) degli ingressi e l'uscita attesa. Fatto questo viene chiamata la funzione membro della classe perceptron che si occupa dell'addestramento. A video sarà stampata anche il valore dell'uscita prima dell'apprendimento, è quindi possibile rendersi conto, in maniera molto immediata se il perceptron ha imparato, la forma desiderata.

Interroga il Percettrone

Una volta terminato l'addestramento è possibile interrogare il perceptron inserendo il valore degli ingressi, dopodiché sarà invocata la funzione membro calcolauscita. A video sarà stampato il risultato della funzione.

Mostra i pesi delle connessioni

Ritorna a video il valore del vettore delle connessioni.


Reinizializza il Percettrone

Provvede a distruggere il perceptron in uso e, invocando un nuovo costruttore senza richiedere i parametri di costruzione (già noti), ne costruisce uno nuovo non addestrato.


perceptron.cc

#include "percep.h"

#include <fstream.h>

#include <stdlib.h>

#include <conio.h>


void menuprinc()



void main(void)


while (addestra==0);

break;


case 2: clrscr();

cout << " Attenzione: inserire solo 0 e 1 distanziati da uno spazio";

do


while (addestra==0);

break;


case 3: cout << "\n Il vettore dei pesi è: ";

for (int i=0; i<dim; i++) cout << percettrone->peso(i) << " ";

cout << "\n";

break;


case 4: delete percettrone;

percettrone = new perceptron(dim, coeff);

break;


case 5: fine=1; break;

}

}

while (fine==0);







Privacy




Articolo informazione


Hits: 2470
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024