👉 SCARICA LA TERZA EDIZIONE DEL CATALOGO EMI/EMC 👈

Come creare una rete neurale?

Posted by Batter Fly 07/11/2024 0 Comment(s) 2486 Strumenti di Misura,

Scopri come utilizzare la rete neurale Moku per creare una rete semplice, dal download dei prerequisiti al test su Moku:Pro. 

Per creare una rete neurale, questo esempio passo-passo utilizza il file sum.ipynb, dove l'output previsto è semplicemente la somma degli input e utilizza solo un livello nascosto. Sebbene questa semplice operazione possa essere completata in molti modi, è facile addestrare la rete neurale Moku per implementare quasi qualsiasi funzione, dalla semplice algebra all'inferenza complessa. Trova altri esempi qui e scarica la guida alla rete neurale qui.

Prerequisiti generali
Per iniziare a utilizzare lo strumento Moku Neural Network, avrai bisogno di:

  • Un dispositivo Moku:Pro (i dispositivi Moku:Lab e Moku:Go non sono attualmente supportati)
  • Moku Versione 3.3, disponibile per il download su Windows o macOS
  • Un'installazione di Python (v3.11); consulta la guida all'installazione di Moku Python per i dettagli. Puoi anche installare un ambiente come Anaconda. La tua versione di Python deve essere la v3.11 o superiore. Se non sei sicuro della versione installata, controllala tramite prompt dei comandi o terminale con python --version o python3 --version.

Prerequisiti Python
Dopo aver installato Python sulla tua macchina, assicurati di avere le seguenti dipendenze:

  • Moku Neural Network API (vedi sotto)
  • Numpy 1.26.4
  • Ipykernel 6.29.5
  • Matplotlib 3.9.2
  • Tqdm 4.66.5
  • Tensorflow 2.16.2
  • SciPy (richiesto per questo esempio, ma non necessariamente in generale)

Installa la Moku Neural Network API digitando

pip install 'moku[neuralnetwork]'

nel prompt dei comandi o nel terminale del tuo computer. Questo installerà l'API per Moku e scaricherà tutte le dipendenze necessarie.

Se utilizzi Python regolarmente, è probabile che la maggior parte di questi pacchetti sia già installata. Per verificare, apri un prompt dei comandi o un terminale e digita pip install X, dove X è il nome del pacchetto che desideri installare. Se il pacchetto è già presente, il comando restituirà un messaggio simile al seguente:

(base) jessicapatterson@Jessicas-MacBook-Pro ~ % pip install numpy
Requirement already satisfied: numpy in /opt/anaconda3/lib/python3.12/site-packages (1.26.4)


La procedura per installare TensorFlow può variare a seconda che tu voglia utilizzare la GPU per i calcoli. Per istruzioni precise su come installarlo, consulta la documentazione di TensorFlow, specialmente se prevedi di utilizzare una GPU. Per ora, semplicemente utilizza pip install tensorflow per confermare che sia stato installato.

(base) jessicapatterson@Jessicas-MacBook-Pro ~ % pip install tensorflow


Una volta installato, prova a richiamare TensorFlow e creare un tensore utilizzando questo comando:

(base) jessicapatterson@Jessicas-MacBook-Pro ~ % python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"


Se questo comando viene eseguito senza errori, l'installazione è completata e puoi passare al passaggio successivo. Se invece restituisce l'errore "The TensorFlow library was compiled to use AVX instructions, but these aren't available on your machine", significa che purtroppo il tuo computer non è in grado di eseguire TensorFlow. Consulta la loro documentazione per trovare soluzioni a questo problema.

(base) jessicapatterson@Jessicas-MacBook-Pro ~ % python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
tf.Tensor(258.68292, shape=(), dtype=float32)


Addestramento di una rete neurale semplice
Per la nostra prima rete neurale, alleneremo un modello per generare la somma ponderata dei canali di input con un termine di bias/offset opzionale. I pesi e i bias verranno determinati attraverso dati di addestramento artificiali creati in Python. Successivamente, potremo caricare i parametri sullo strumento Moku Neural Network e validare il modello utilizzando l'Oscilloscopio Moku e il suo generatore di forme d'onda integrato. Questo esempio utilizzerà un notebook Jupyter per un'esecuzione interattiva e semplice del codice Python. Tuttavia, anche un semplice script Python scritto ed eseguito nel tuo IDE preferito sarà sufficiente.

Inizia avviando Jupyter dalla finestra di Anaconda, quindi carica e apri il notebook Python sum.ipynb.

Passo 1: Importazioni e definizione delle funzioni
Inizia eseguendo il primo blocco di codice (Figura 1), che importerà tutte le dipendenze necessarie e richiamerà l'API della rete neurale. Se il primo blocco di codice viene eseguito senza errori, significa che tutti i componenti sono a posto e possiamo procedere al passaggio successivo. Se invece si verifica un errore, controlla la sezione precedente per assicurarti che tutti i prerequisiti siano installati correttamente.

Figura 1: Importazioni necessarie per sum.ipynb



Successivamente, genera i segnali per l'addestramento come mostrato nella Figura 2. Abbiamo bisogno di tre canali di input e un canale di output di dati simulati. Puoi anche utilizzare il tuo Moku:Pro per generare o acquisire dati reali per l'addestramento. Verifica i dati di addestramento tracciando i segnali di input generati insieme all'output desiderato e sommato (Figura 3).

Figura 2: Generazione di dati simulati per l'addestramento.

Figura 3: Dati di input simulati e output desiderati per l'addestramento del modello.



Successivamente, dobbiamo preparare i nostri dati per addestrare il modello. Iniziamo rimodellando gli input in una matrice della forma (N,3) e gli output nella forma (N,1) prima di inviarli al modello. Questo codice è mostrato nella Figura 4.

Figura 4: Trasposizione dei dati per l'addestramento.



In questo esempio, i dati esistenti sono sufficienti per l'addestramento, ma puoi scegliere di generare ulteriori dati di addestramento o ridimensionare gli input e gli output. Se decidi di applicare il ridimensionamento, dovrai applicare lo stesso ridimensionamento nella Moku Neural Network durante l'esecuzione


Passo 2: Definire il modello
Ora possiamo costruire il modello di rete neurale. Iniziamo creando un oggetto, denominato "linn_model", che rappresenta la configurazione e le limitazioni dello strumento Moku Neural Network. Una volta che abbiamo istanziato l'oggetto del modello nella Figura 5, possiamo passare i dati di addestramento precedentemente generati al modello.

Figura 5: Istanziamento del modello.



Definiamo quindi il modello creando un array, dove ogni elemento dell'array corrisponde a uno strato della rete neurale. Questi elementi sono tuple, che indicano il numero di neuroni e la funzione di attivazione per quello strato. Ad esempio, (16, 'relu') indica uno strato con 16 neuroni e una funzione di attivazione ReLU. A parte gli strati di input e output, il numero di neuroni e la funzione di attivazione per ogni strato è a discrezione dell'utente. Mentre il modello di sum.ipynb utilizza un singolo neurone (Figura 7), sentiti libero di commentare quella definizione del modello e provare alcune delle opzioni aggiuntive. Puoi scegliere funzioni di attivazione e numeri di neuroni diversi per ogni strato.

Figura 6: Costruzione della definizione del modello.



Successivamente, definiamo il modello creando un array, dove ogni elemento dell'array corrisponde a uno strato della rete neurale. Eseguire questa cella popolerà la definizione del modello, come mostrato nella Figura 7.

Figura 7: La definizione del modello in sum.ipynb.



Quando crei i tuoi modelli, puoi includere fino a cinque layer densi, noti anche come layer nascosti, ciascuno con un massimo di 100 neuroni. Puoi scegliere tra le funzioni di attivazione ReLU, tanh, softsign, lineare e sigmoid per ogni layer. Le uscite di ogni layer vengono passate attraverso questa funzione di attivazione prima di passare al layer successivo. Senza queste funzioni, le operazioni della rete neurale sarebbero completamente lineari e si ridurrebbero a una singola operazione.


Passaggio 3: Allenare il modello e visualizzare il feedback
Ora che abbiamo definito il nostro modello, dobbiamo allenarlo affinché rappresenti la mappatura desiderata. Questo passaggio è semplice come chiamare la funzione fit_model() con alcuni argomenti di base. Permetteremo al nostro modello di allenarsi per 500 epoche (passaggi di addestramento) e terremo da parte il 10% dei dati di addestramento sopra menzionati per la validazione. Imposteremo anche una configurazione di "early stopping" (arresto precoce) per interrompere l'allenamento quando la funzione di perdita si stabilizza. Questo approccio aiuta a evitare il "overfitting", dove il modello diventa molto bravo a prevedere i dati di addestramento a scapito della sua capacità di generalizzare. Inoltre, ha il vantaggio di velocizzare il tempo di completamento.

Figura 8: Allenamento del modello.

Una volta completato l'allenamento, traccia la perdita di addestramento e la perdita di validazione per valutare il successo dell'allenamento. Nota che la perdita nella Figura 9 diminuisce man mano che l'addestramento procede, il che è previsto.

Figura 9: Perdita e perdita di validazione tracciate durante l'addestramento.



Puoi scegliere di convalidare il tuo modello tracciando l'output previsto ora che è stato addestrato, come mostrato in Figura 10. Nota la scala del secondo grafico che mostra la differenza molto piccola tra gli output previsti e quelli desiderati.

Figura 10: Grafico degli output desiderati e previsti dal modello.



Passo 4: Salva i parametri
Ora che abbiamo un modello completamente addestrato, è pronto per essere eseguito su Moku. Salva il modello in un file .linn per l'uso nel Moku Neural Network (Figura 11).

Figura 11: Funzione per salvare il modello della rete in un file .linn compatibile con il Moku Neural Network.



Distribuire e convalidare il modello con Moku
In modalità Multi-instrumento su Moku:Pro (Figura 12), posiziona il Moku Neural Network nello Slot 1 e l'Oscilloscopio nello Slot 2. Successivamente, collega le uscite dell'Oscilloscopio agli ingressi del Neural Network. Poi, fai clic su "applica modifiche" e attendi che l'FPGA si configuri.

Figura 12: Configurazione in modalità Multi-instrumento su Moku:Pro.



Ora, apri il menu della Rete Neurale e carica il file sum.linn generato dallo script Python utilizzando il pulsante "Carica configurazione rete", situato sotto il diagramma come mostrato nella Figura 13. Dovresti vedere un layer con tre ingressi, un'uscita e una funzione di attivazione lineare, come previsto.

Figura 13: La Rete Neurale Moku con il file sum.linn caricato.



Accedi all'Oscilloscopio e apri il Generatore di Onde integrato facendo clic sull'icona della sinusoide nell'angolo in basso a destra. Genera due segnali per testare la funzionalità del modello, come mostrato nella Figura 14. In questo esempio, useremo due onde sinusoidali: una con un'ampiezza di 1 Vpp e una frequenza di 1 kHz, e l'altra con un'ampiezza di 500 mVpp e una frequenza di 100 Hz.

Figura 14: Impostazioni esempio del Generatore di forma d'onda integrato.



Dovresti vedere il segnale sommato apparire sul Canale A dell'Oscilloscopio. Scala la visualizzazione dell'Oscilloscopio con il mouse per visualizzare il segnale. Le due onde sinusoidali sommate insieme dovrebbero somigliare al segnale nella Figura 15.

Figura 15: Uscita del Moku Neural Network.



Verifica il funzionamento della rete utilizzando i cursori e le misurazioni integrate come mostrato nella Figura 16, testando i componenti di ampiezza e frequenza previsti, oppure utilizza l'analizzatore di spettro Moku. Sentiti libero di testare la rete con altri tipi di segnali, frequenze o altri parametri.

Figura 16: Verifica dell'uscita della Moku Neural Network.



Conclusione
Da qui, puoi modificare gli script di esempio forniti o scrivere i tuoi per creare modelli di machine learning unici e potenti da integrare con qualsiasi altro strumento Moku. Esegui sistemi di controllo in tempo reale, prevedi gli output degli esperimenti e molto altro, il tutto con l'unica rete neurale basata su FPGA integrata con una suite riconfigurabile di strumenti di test e misurazione ad alte prestazioni.

Leave a Comment