Le reti neurali sono un concetto importante nei campi dell'intelligenza artificiale e dell'apprendimento automatico. Sono costituiti da nodi interconnessi, organizzati in strati e imitano il funzionamento del cervello umano. I nodi rappresentano i neuroni del cervello umano.
Puoi creare la tua semplice rete neurale di classificazione multiclasse feed-forward. Addestralo per classificare le cifre scritte a mano utilizzando il set di dati MNIST. È quindi possibile utilizzare la visione artificiale per classificare le proprie cifre scritte a mano.
Che cos'è la classificazione multiclasse?
La classificazione multiclasse è un tipo di apprendimento automatico in grado di classificare i dati in più di due categorie. Le reti neurali utilizzano il classificatore softmax per distribuire la probabilità su possibili classi.
È possibile utilizzare la classificazione multiclasse per classificare le immagini scritte a mano dal set di dati MNIST in 10 categorie. Queste categorie corrisponderanno alle cifre da 0 a 9.
Comprensione del set di dati MNIST
Il set di dati MNIST è un popolare set di dati di riferimento per gli algoritmi di machine learning e visione artificiale. Contiene 70.000 immagini scritte a mano in scala di grigi che hanno una dimensione di 28 x 28 pixel. Le cifre scritte a mano sono comprese tra 0 e 9.
Prima di creare qualsiasi modello di machine learning, è importante capire cosa contiene il tuo set di dati. Comprendere il set di dati ti consentirà di eseguire una migliore pre-elaborazione dei dati.
Preparare il tuo ambiente
Per seguire questo tutorial, dovresti avere familiarità con il basi di Python. Dovresti anche avere un conoscenza di base dell'apprendimento automatico. Infine, dovresti sentirti a tuo agio nell'usare Jupyter Notebook o Google Colab.
Il codice sorgente completo è disponibile in a Deposito GitHub.
Crea un nuovo Jupyter Notebook o accedi a Google Colab. Esegui questo comando per installare i pacchetti richiesti:
!pip installa numpy matplotlib tensorflow opencv-python
Userai:
- Matplotlib per la visualizzazione dei dati.
- NumPy per manipolare gli array.
- TensorFlow per creare e addestrare il tuo modello.
- OpenCV per alimentare il modello con le tue cifre scritte a mano.
Importazione dei moduli necessari
Importa i pacchetti che hai installato nel tuo ambiente. Ciò ti consentirà di chiamare e utilizzare in seguito le loro funzioni e moduli nel tuo codice.
importare tensorflow COME tf
da tensorflow importare keras
importare matplotlib.pyplot COME plt
%matplotlib in linea
importare intorpidito COME np
importare cv2
La seconda riga di codice importa il modulo Keras dal file Libreria Google TensorFlow. Utilizzerai Keras per addestrare la tua rete neurale profonda con TensorFlow come back-end.
Caricamento e visualizzazione del set di dati
Il set di dati MNIST è integrato in Keras. Carica il set di dati MNIST e suddividilo in set di addestramento e test. Utilizzerai il set di addestramento per addestrare il tuo modello e il set di test per valutare l'accuratezza del tuo modello nella classificazione di nuove immagini invisibili.
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
Verificare la durata dei set di addestramento e di test. Il set di dati MNIST ha 60.000 immagini per l'addestramento e 10.000 immagini per il test.
len (X_treno)
len (X_test)
Controlla la forma della prima immagine nel set di dati MNIST che dovrebbe essere di 28 x 28 pixel. Quindi stampa i suoi valori in pixel e visualizzalo usando Matplotlib.
X_treno[0].forma
X_treno[0]
plt.matshow (X_treno[0])
y_treno[0]
L'output della visualizzazione è il seguente:
L'immagine visualizzata mostra che la prima immagine nel set di dati contiene il numero cinque.
Preelaborazione dei dati
Prima di utilizzare i dati nel set di dati per addestrare e testare il modello, è necessario preelaborarlo. La preelaborazione migliora la precisione di un modello standardizzando i dati.
Normalizzazione dei valori dei pixel
Normalizza i valori dei pixel delle immagini nel set di dati dividendo ciascun valore per 255. I valori dei pixel del set di dati non normalizzato vanno da 0 a 255, dove zero è nero e 255 è bianco. Dividendo ogni valore di pixel per 255 si garantisce che ogni pixel sia compreso nell'intervallo tra 0 e 1. Ciò rende più facile per il modello apprendere le caratteristiche e i modelli rilevanti nei dati.
X_treno = X_treno / 255
X_test = X_test / 255
Quindi stampa i valori in pixel della prima immagine.
X_treno[0]
Si noti che ora sono nell'intervallo tra 0 e 1.
Conversione delle matrici di immagini in un array 1D
Il livello di input della rete neurale generalmente prevede input 1D, quindi crea un array 1D dei valori dei pixel dell'immagine. Per fare ciò, usa la funzione reshape() con il numero di raw impostato sul numero di immagini nel set di dati.
X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (len (X_test), 28 * 28)
X_train_flattened.shape
X_treno_appiattito[0]
Le tue immagini sono ora pronte per addestrare e testare il modello.
Creazione del modello di rete neurale profonda
Crea un modello sequenziale con il modulo Keras di Tensorflow utilizzando un livello di input, due livelli nascosti e un livello di output. Imposta la forma di input su 28 per 28 poiché questa è la forma delle immagini originali nel set di dati. Usa 128 nodi per i livelli nascosti. Il livello di output dovrebbe avere solo 10 neuroni poiché stai classificando solo le cifre da 0 a 9.
modello = keras. Sequenziale([
keras.layers. Appiattisci (input_shape=(28, 28)),keras.layers. Denso(128, attivazione='rilu'),
keras.layers. Denso(128, attivazione='rilu'),
keras.layers. Denso(10, attivazione='softmax')
])
Compilare il modello utilizzando il Adamo ottimizzatore, sparse_categorical_crossentropy come la funzione di perdita e la metrica per valutare le prestazioni del modello come precisione. Quindi inserire i dati di addestramento nel modello e impostare il numero di epoche su cinque.
model.compile (ottimizzatore='Adamo',
perdita='sparse_categorical_crossentropy',
metriche=['precisione'])
model.fit (X_treno, y_treno, epoche=5)
Il modello impiegherà alcuni minuti per addestrarsi. Al termine dell'addestramento del modello, valutarne le prestazioni sul set di test.
model.evaluate (X_test, y_test)
La funzione di valutazione restituirà la perdita e l'accuratezza del modello. Il modello produce una precisione del 98%.
Utilizzo del modello per classificare le proprie cifre scritte a mano
Per classificare le tue cifre scritte a mano, devi preparare le tue immagini in modo che corrispondano a quelle del set di dati MNIST. In caso contrario, il tuo modello avrà prestazioni scadenti.
Per preelaborare le immagini:
- Carica l'immagine contenente la cifra usando OpenCV.
- Convertilo in scala di grigi e ridimensionalo a 28 per 28 pixel.
- Capovolgi e normalizza i valori dei pixel.
- Infine, appiattisci l'immagine in un array 1D.
Passa l'immagine preelaborata nel modello per la previsione e stampa il valore previsto sullo schermo.
img = cv2.imread('cifre/cifra1.png', cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img, (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.astype('galleggia32') / 255.0# Appiattisci l'immagine in una matrice 1D
input_data = img_normalized.flatten().reshape( 1,28,28)
# Fai una previsione usando il modello
previsione = model.predict (input_data)
stampa (f'Predizione: {np.argmax (previsione)}')
Passaggio di un'immagine preelaborata contenente un numero al modello.
L'output del modello è il seguente:
Il modello è stato in grado di classificare correttamente la cifra sette.
Reti neurali nei chatbot
L'uso delle reti neurali è esploso negli ultimi anni. Sono stati utilizzati prevalentemente nell'elaborazione del linguaggio naturale per la traduzione linguistica e l'IA generativa.
Più di recente, c'è stato un aumento del numero di chatbot in grado di comunicare in modo umano. Usano un tipo di rete neurale nota come rete neurale del trasformatore. Interagisci con alcuni di loro e sperimenta la potenza delle reti neurali.