Mokabyte

Dal 1996, architetture, metodologie, sviluppo software

  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il Primo Sito Web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
Menu
  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il Primo Sito Web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
Cerca
Chiudi

Nel numero:

113 dicembre
, anno 2006

Joone (Java Object Oriented Neural Engine)

Introduzione alle reti neurali con un progetto Open Source

Avatar

Marco Ratto

Marco Ratto ha conseguito la laurea in Scienze dell‘Informazione nel 1999 presso la Facoltà di Scienze Matematiche Fisiche e Naturali dell‘Università degli Studi di Torino con la realizzazione della tesi ‘‘Accesso remoto ad un servizio di creazione di un orario: autenticazione dell‘utente in ambiente Java‘‘ .
Dal 1994 ha iniziato a lavorare come consulente nel settore IT e dal 2000 lavora come esperto di tecnologie J2EE ed Open Source in Banksiel per quanto riguarda il campo bancario/assicurativo e in Finsiel nel campo della Pubblica Amministrazione.

MokaByte

Joone (Java Object Oriented Neural Engine)

Introduzione alle reti neurali con un progetto Open Source

Marco Ratto

Marco Ratto

  • Questo articolo parla di: Intelligenza artificiale, Java

Reti Neurali e Intelligenza Artificiale: Introduzione al progetto Open Source Joone (Joone Object Oriented Neural Engine).

Introduzione

In questo articolo verrà  affrontato un argomento molto complesso ma anche molto affascinante: le Reti Neurali. Dopo una breve introduzione teorica sulle reti neurali, passerò ad illustrare un prodotto Open Source (Joone) con un piccolo esempio.

Reti Neurali Artificiali

Una rete neurale (vedere fig. 1) è composta da elementi di elaborazione (Neuroni) connessi tra di loro tramite collegamenti (Sinapsi), in modo da formare uno schema assimilabile ad un semplicissimo tessuto nervoso. I neuroni sono raggruppati in strati successivi (Layers), nei quali ogni neurone riceve il segnale esclusivamente dai neuroni dello strato precedente (rete neurale feed-forward).

Figura 1 â?? Esempio di rete neurale

Ogni Neurone, attraverso le connessioni (W1, W2, …Wn), riceve in ingresso il segnale da tutti i neuroni dello strato precedente (I1, I2,…In). Gli input, cosଠpesati, vengono sommati e al risultato finale (l‘input netto) viene applicata una funzione di trasferimento. Il valore di output cosଠcalcolato (Y) viene presentato in ingresso ai neuroni dello strato successivo… e cosଠvia (figura 2).


Figura 2 â?? Esempio di neurone

Come lavora una rete neurale?

Per prima cosa si deve istruire la rete neurale attraverso una fase di apprendimento, ossia:

  • Fornire i dati alla rete
  • La rete calcola un risultato
  • La rete confronta il risultato ottenuto con il valore desiderato
  • La rete introduce dei pesi per correggere l‘errore


Figura 3 â?? Fase di apprendimento

successivamente, si potrà  utilizzare la rete neurale, ossia:

  1. Fornire nuovi dati alla rete
  2. La rete calcola il risultato in base alla conoscenza ottenuta nel passo precedente.

Le caratteristiche principali di una rete neurale addestrata sono le seguenti:

Categorizzazione

Una rete neurale è in grado di classificare gli esempi in ingresso (patterns) “estraendo” le caratteristiche peculiari dai dati usati per il training

Generalizzazione

Una rete neurale è in grado di fornire risposte corrette anche con dati di ingresso diversi rispetto a quelli usati per il training

Robustezza

Una rete neurale è in grado di fornire comunque una risposta corretta anche in presenza di dati incompleti o parzialmente errati

I campi di applicazione delle reti neurali sono i più svariati, ad esempio:

Classificazione

Diagnosi mediche, riconoscimento del testo (OCR), riconoscimento vocale, strumenti di anti-spam per e-mail, ecc.

Approssimazione di funzioni

Controllo dei processi, data modeling, ecc.

Predizione di serie temporali

Previsione andamento dei mercati finanziari, Analisi di portafoglio, ecc.

Data Mining

Visualizzazione ed estrazione di dati, ecc.

Il progetto Joone

Joone (http://www.joone.org/) è un framework scritto in Java che serve a scrivere ed eseguire applicazioni di Intelligenza Artificiale basate sulle reti neurali.
Le applicazioni che utilizzano Joone possono essere disegnate su una singola macchina, istruite utilizzando una rete distribuita ed eseguite su qualsiasi altro device che supporta java.
Joone è realizzato con un‘architettura modulare; i moduli principali di Joone sono:

  • Un core engine che espone API Java per la costruzione di reti neurali embedded in altre applicazioni
  • Un editor visuale per la creazione, addestramento e test di reti neurali attraverso un‘interfaccia grafica user-friendly
  • Un ambiente di training distribuito basato su tecnologia Jini, con il quale è possibile addestrare in parallelo diverse reti neurali su di un numero illimitato di macchine connesse in LAN

Installazione di Joone

Joone è 100% java e può essere eseguito su un qualsiasi sistema operativo dotato di  Java Runtime Environment (JRE) versione 1.4.x o superiore. Attualmente il progetto è testato sui seguenti sistemi operativi:

  • Linux
  • Mac OSX
  • Windows 2000
  • Windows XP
  • SUN Solaris

La memoria necessaria a far funzionare Joone è strettamente legata alla complessità  della rete neurale (minimo 128 MB).

Su Linux è meglio utilizzare il file ZIP in quanto il file di setup JooneEditor1.2.1-Linux-NoVM.bin non funziona in modo corretto:

# unzip JooneEditor1.2.1-All.zip

Su Windows:

Lanciare il file “JooneEditor1.2.1-Win-NoVM.exe” (figura 4)


Figura 4 â?? Esecuzione di  JooneEditor1.2.1-Win-NoVM.exe

Premere il pulsante Next fino alla fine e per ultima il pulsante “Done” (figura 5)


Figura 5 â?? Fine Installazione di Joone

Esempio: calcolo della funzione XOR

Come esempio utilizzeremo Joone e le reti Neurali per il calcolo della funzione XOR.
Per prima cosa rivediamo la tabella dello XOR:

Input 1 Input 2 Output
0  0  0
0  1  1
1  0  1
1  1  0

La rete neurale che si dovrà  implemetare è quella rappresentata in figura 6:


Figura 6 â?? Rete Neurale XOR

Aprire l‘editor di Joone, su linux:

# cd joone/
# ./RunEditor.sh

Su Windows fare doppio clic sull‘icona “Joone”.

Appare la seguente finestra (figura 7):


Figura 7 â?? Editor Joone

Aggiungere un sigmoid layer e impostare come nome “Input” e come parametro rows 2;

Aggiungere un sigmoid layer e impostare come nome “Hidden” e come parametro rows 3;

Aggiungere un sigmoid layer e impostare come nome “Output” e come parametro rows 1;

Connettere l‘input layer con l‘hidden layer trascinando una linea dal cerchio blu del bordo destro dell‘input layer, rilasciare il mouse sopra l‘hidden layer;

Ripetere  per collegare l‘hidden layer all‘output layer.

Il risultato dovrebbe essere quello di figura 8.


Figura 8 â?? Input, Hidden, Output Layers

Inserire un “File Input layer” alla sinistra dell‘input layer e collegarlo all‘Input Layer come in figura 9.


Figura 9 â?? File Input Layer 1

Cambiare le impostazioni al “File Input layer”nel modo seguente (figura 10):

Impostare il parametro AdvancedColumnSelector a 1,2

Impostare il parametro “fileName parameter” scegliendo il file xor.txt

Lasciare il parametro firstRow a 1 ed il parametro lastRow a 0 (zero vuol dire che il File Input Layer leggerà  tutto il files).


Figura 10 â?? File Input Layer 1 Properties

Adesso dobbiamo inserire un Teacher layer alla destra dell‘output layer.
 Collegare l‘output layer al Teacher layer (figura 11).


Figura 11 â?? Teacher Layer

Adesso dobbiamo fornire i dati per istruire la rete (ossia l‘ultima colonna del file xor.txt).
Inserire un File Input layer sopra al Teacher layer, collegare il Teacher Layer al File Input Layer come in figura 12:


Figura 12 â?? File Input Layer 2

Cambiare le impostazioni al “File Input layer”nel modo seguente (figura 13):
Impostare il parametro AdvancedColumnSelector a 3
Impotare il parametro “fileName parameter” scegliendo il file xor.txt
Lasciare il parametro firstRow a 1 ed il pametro lastRow a 0 (zero vuol dire che il File Input Layer leggerà  tutto il file).


Figura 13 â?? File Input Layer 2 Properties

Aprire adesso la Finestra Tools e scegliere Control Panel (Figura 14).


Figura 14 â?? Control Panel 1

Impostare i seguenti parametri:
Parametro epochs a 10000 (il file verrà  letto 10000 volte)
Parametro “training patterns” a 4 (numero di righe dell‘esempio)
Parametro learningRate a 0.8
Parametro momentum a 0.3
Parametro learning a TRUE (perchè la rete deve essere istruita)

Premere il pulsante Run per dar inizio al processo di apprendimento della rete.
Attendere la fine dell‘esecuzione, verificare che l‘errore (RMSE) dovrà  essere un numero molto piccolo inferiore a 0.1.
Se fosse più grande, allora andare sulla voce di menu Tools, scegliere Randomize e poi premere di nuovo il pulsante Run


Figura 15 â?? Control Panel 2

A questo punto la rete è istruita ed è possibile salvare i dati della rete per poi ricaricarli successivamente andando sull‘opzione File e poi Save as.

Vediamo se  la rete neurale ha imparato correttamente verificandone il risultato.
Aggiungere un File Output Layer come in figura 16.


Figura 16 â?? File Output Layer

Impostare le proprietà  nel modo seguente (figura 17):
Parametro fileName con /tmp/xorout.txt


Figura 17 â?? File Output Layer

Disabilitare il Teacher Layer modificando le sue Properties (figura 18).


Figura 18 â?? Teacher Disabled

La rete neurale dovrebbe essere come in figura 19:


Figura 19 â?? Layers

Aprire adesso la Finestra Tools –> Control Panel (Figura 20).


Figura 20 â?? Control Panel 3

Modificare solo i seguenti parametri:
Parametro epochs a 1 (il file verrà  letto una sola volta)
Parametro learning a FALSE (non è più una fase di apprendimento)

Premere il pulsante Run.

Verrà  scritto il file /tmp/xorout.txt. Il contenuto del file sarà  simile al seguente:


#cat /tmp/xorout.txt
0.009558925072561689
0.9913854170900274
0.9912069173284735
0.008018880123792496

Questo risultato mostra come la rete neurale ha correttamente imparato il problema dello XOR, fornendo i valori corretti:

  •  un valore vicino allo zero per le colonne di input [0, 0] e [1, 1]
  •  un valore vicino ad 1 per le colonne di input [0, 1] e [1, 0]


Conclusioni

In questo articolo è stata fatta un‘introduzione teorica sulle reti neurali e sul progetto Open Source Joone che permette di sperimentare ed apprendere meglio questa materia.
Per chi volesse sperimentare un filtro Anti-Spam con Joone, è possibile scaricare i files necessari direttamente dal sito http://www.jugroma.it/jug/gen2006/joone/

Contenuto del file ZIP

Il file joone_esempio.zip (menu in alto a sinistra) contiene i seguenti files:

  • xor.ser: il progetto di Joone
  • xor.txt: il file di input
  • xorout.txt: il file di output per verificare il risultato

Riferimenti

[1] Paolo Marrone, “Joone Complete Guide”, JooneCompleteGuide.pdf, 03/02/2005
[2] Paolo Marrone, “JOONE, un framework Open Source per l‘utilizzo delle Reti Neurali Artificiali in Java”, mi28_p6_marrone.pdf, Javaconference 2006
[3] Paolo Marrone, “The Core Engine”, engine.pdf, 2004
[4] Paolo Marrone, “The GUI Editor”, guiEditor.pdf, 2004
[5] Wiki, http://www.jooneworld.com/wiki

Risorse

[1] JDK 1.4.2, http://java.sun.com/j2se/1.4.2/download.html
[2] Progetto, http://sourceforge.net/projects/joone
[3] Joone 1.2.1, http://www.joone.org/
[4] Esempio dell‘articolo, joone_esempio.zip (menu in alto a sinistra)

Facebook
Twitter
LinkedIn
Avatar

Marco Ratto

Marco Ratto ha conseguito la laurea in Scienze dell‘Informazione nel 1999 presso la Facoltà di Scienze Matematiche Fisiche e Naturali dell‘Università degli Studi di Torino con la realizzazione della tesi ‘‘Accesso remoto ad un servizio di creazione di un orario: autenticazione dell‘utente in ambiente Java‘‘ .
Dal 1994 ha iniziato a lavorare come consulente nel settore IT e dal 2000 lavora come esperto di tecnologie J2EE ed Open Source in Banksiel per quanto riguarda il campo bancario/assicurativo e in Finsiel nel campo della Pubblica Amministrazione.

Marco Ratto

Marco Ratto

Marco Ratto ha conseguito la laurea in Scienze dell‘Informazione nel 1999 presso la Facoltà di Scienze Matematiche Fisiche e Naturali dell‘Università degli Studi di Torino con la realizzazione della tesi ‘‘Accesso remoto ad un servizio di creazione di un orario: autenticazione dell‘utente in ambiente Java‘‘ . Dal 1994 ha iniziato a lavorare come consulente nel settore IT e dal 2000 lavora come esperto di tecnologie J2EE ed Open Source in Banksiel per quanto riguarda il campo bancario/assicurativo e in Finsiel nel campo della Pubblica Amministrazione.
Tutti gli articoli
Nello stesso numero
Loading...

Le applicazioni web e Java

IV parte: Deployment di una applicazione web

Java e SMS

III parte: Comandi AT per il modem

Ant, la formica operosa che beve caffè

II parte

TikeSwing

I parte: introduzione al framework e al pattern MVC

Spring

III parte: Il supporto di Spring per l‘Aspect Oriented Programming

Nella stessa serie
Loading...

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

VI parte: Data processing e persistenza

WebAssembly, uno standard web per il presente e per il futuro

I parte: Panoramica e caratteristiche

Cos’è che fa di un DevOps un DevOps?

Principi, pratiche, ruolo

Quindici statistiche da conoscere per lavorare in UX design

Uno sguardo internazionale

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

V parte: Data Ingestion & Computing

User Story Game

Capire l’importanza delle User Stories… giocando

Sbagliando si impara?

Elenco ragionato di alcuni errori tipici nella pratica Scrum

Cybersecurity e cloud computing

Le basi per mettere in sicurezza il cloud

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

IV parte: L’invio dei dati al topic di Kafka

Verso #play14 Bologna 2022

Cosa era successo la volta precedente

Product Owner: chi è?

Perché non è un Project Manager agile?

Come monitorare l’avanzamento dei lavori in Agile

Misurare lo stato di avanzamento di un progetto in Agile

Contributors

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

III parte: Il framework Spark

Kanban in pratica

Qualche suggerimento in azione

Comunicazione tra microservizi con Apache Kafka

Un esempio pratico

OKR, cadenze in Kanban e Flight Levels

Uscire dalla trappola dell’agilità locale

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

II parte: Tecnologie di analisi

Big Data vs Fast Data

Estrarre valore dai dati in tempo reale

Lean Manufacturing e Agile

Esempi applicativi di integrazione possibile

Approccio Agile e pianificazione strategica

La coesistenza è possibile?

Impact Mapping e Liminal Thinking

II parte: Progettare gli impatti

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

I parte: Introduzione e panoramica

Agile Coaching

Un modello operativo per l'agile coach

Mokabyte

MokaByte è una rivista online nata nel 1996, dedicata alla comunità degli sviluppatori java.
La rivista tratta di vari argomenti, tra cui architetture enterprise e integrazione, metodologie di sviluppo lean/agile e aspetti sociali e culturali del web.

Imola Informatica

MokaByte è un marchio registrato da:
Imola Informatica S.P.A.
Via Selice 66/a 40026 Imola (BO)
C.F. e Iscriz. Registro imprese BO 03351570373
P.I. 00614381200
Cap. Soc. euro 100.000,00 i.v.

Privacy | Cookie Policy

Contatti

Contattaci tramite la nostra pagina contatti, oppure scrivendo a redazione@mokabyte.it

Seguici sui social

Facebook Linkedin Rss
Imola Informatica
Mokabyte