Rețelele neuronale sunt un concept important în domeniile inteligenței artificiale și învățării automate. Ele constau din noduri interconectate, organizate în straturi și imită modul în care funcționează creierul uman. Nodurile reprezintă neuronii creierului uman.
Vă puteți crea propria dvs. rețea neuronală de clasificare multiclasă simplă de tip feed-forward. Antrenați-l pentru a clasifica cifrele scrise de mână folosind setul de date MNIST. Puteți utiliza apoi viziunea computerizată pentru a vă clasifica propriile cifre scrise de mână.
Ce este clasificarea cu mai multe clase?
Clasificarea multiclasă este un tip de învățare automată care poate clasifica datele în mai mult de două categorii. Rețelele neuronale folosesc clasificatorul softmax pentru a distribui probabilitatea pe clase posibile.
Puteți utiliza clasificarea multiclasă pentru a clasifica imaginile scrise de mână din setul de date MNIST în 10 categorii. Aceste categorii vor corespunde cifrelor de la 0 la 9.
Înțelegerea setului de date MNIST
Setul de date MNIST este un set de date de referință popular pentru învățarea automată și algoritmii de viziune pe computer. Conține 70.000 de imagini scrise de mână în tonuri de gri, cu dimensiunea de 28 pe 28 de pixeli. Cifrele scrise de mână sunt în intervalul de la 0 la 9.
Înainte de a construi orice model de învățare automată, este important să înțelegeți ce conține setul dvs. de date. Înțelegerea setului de date vă va permite să efectuați o preprocesare mai bună a datelor.
Pregătiți-vă mediul
Pentru a urma acest tutorial, ar trebui să fii familiarizat cu elementele de bază ale Python. Ar trebui să aveți și un cunoștințe de bază despre învățarea automată. În cele din urmă, ar trebui să vă simțiți confortabil folosind Jupyter Notebook sau Google Colab.
Codul sursă complet este disponibil în a Depozitul GitHub.
Creați un nou Blocnotes Jupyter sau conectați-vă la Google Colab. Rulați această comandă pentru a instala pachetele necesare:
!pip install numpy matplotlib tensorflow opencv-python
Vei folosi:
- Matplotlib pentru vizualizarea datelor.
- NumPy pentru a manipula matrice.
- TensorFlow pentru a vă crea și antrena modelul.
- OpenCV pentru a alimenta modelul cu propriile tale cifre scrise de mână.
Importul modulelor necesare
Importați pachetele pe care le-ați instalat în mediul dvs. Acest lucru vă va permite să apelați și să utilizați mai târziu funcțiile și modulele lor în codul dvs.
import tensorflow la fel de tf
din tensorflow import keras
import matplotlib.pyplot la fel de plt
%matplotlib inline
import numpy la fel de np
import cv2
A doua linie de cod importă modulul Keras din Biblioteca Google TensorFlow. Veți folosi Keras pentru a vă antrena rețeaua neuronală profundă cu TensorFlow ca backend.
Încărcarea și vizualizarea setului de date
Setul de date MNIST este integrat în Keras. Încărcați setul de date MNIST și împărțiți-l în seturi de antrenament și de testare. Veți folosi setul de antrenament pentru a vă instrui modelul și setul de testare pentru a evalua acuratețea modelului dvs. în clasificarea noilor imagini nevăzute.
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
Verificați durata setului de antrenament și de testare. Setul de date MNIST are 60.000 de imagini pentru antrenament și 10.000 de imagini pentru testare.
len (X_train)
len (X_test)
Verificați forma primei imagini din setul de date MNIST, care ar trebui să fie de 28 pe 28 de pixeli. Apoi imprimați valorile pixelilor acestuia și vizualizați-l folosind Matplotlib.
X_tren[0].formă
X_tren[0]
plt.matshow (X_train[0])
y_train[0]
Ieșirea de vizualizare este după cum urmează:
Imaginea vizualizată arată că prima imagine din setul de date conține numărul cinci.
Preprocesarea datelor
Înainte de a utiliza datele din setul de date pentru a vă instrui și testa modelul, trebuie să-l preprocesați. Preprocesarea îmbunătățește acuratețea unui model prin standardizarea datelor.
Normalizarea valorilor pixelilor
Normalizați valorile pixelilor imaginilor din setul de date împărțind fiecare valoare la 255. Valorile pixelilor setului de date nenormalizate variază de la 0 la 255, zero fiind negru și 255 fiind alb. Împărțirea valorii fiecărui pixel la 255 asigură că fiecare pixel se află în intervalul între 0 și 1. Acest lucru face ca modelul să învețe mai ușor caracteristicile și modelele relevante din date.
X_train = X_train / 255
X_test = X_test / 255
Apoi imprimați valorile pixelilor primei imagini.
X_tren[0]
Observați că sunt acum în intervalul între 0 și 1.
Conversia matricelor de imagine într-o matrice 1D
Stratul de intrare al rețelei neuronale așteaptă, în general, intrări 1D, așa că creați o matrice 1D a valorilor pixelilor imaginii. Pentru a face acest lucru, utilizați funcția reshape() cu numărul de raw setat la numărul de imagini din setul de date.
X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (len (X_test), 28 * 28)
X_tren_aplatizat.forma
X_tren_aplatizat[0]
Imaginile tale sunt acum gata pentru antrenament și testare a modelului.
Crearea modelului rețelei neuronale profunde
Creați un model secvențial cu modulul Keras al Tensorflow folosind un strat de intrare, două straturi ascunse și un strat de ieșire. Setați forma de intrare la 28 pe 28, deoarece aceasta este forma imaginilor originale din setul de date. Utilizați 128 de noduri pentru straturile ascunse. Stratul de ieșire ar trebui să aibă numai 10 neuroni, deoarece clasificați doar cifrele de la 0 la 9.
model = keras. secvenţial([
keras.straturi. Aplatizare (input_shape=(28, 28)),keras.straturi. Dens(128, activare='relu'),
keras.straturi. Dens(128, activare='relu'),
keras.straturi. Dens(10, activare="softmax")
])
Compilați modelul folosind Adam optimizator, sparse_categorical_crossentropy ca funcție de pierdere și metrica pentru a evalua performanța modelului ca precizie. Apoi potriviți datele de antrenament în model și setați numărul de epoci la cinci.
model.compile (optimizator='adam',
pierdere=„sparse_categorical_crossentropy”,
metrics=['precizie'])
model.fit (X_train, y_train, epochs=5)
Modelul va dura câteva minute pentru a se antrena. După ce s-a terminat antrenamentul modelului, evaluați performanța acestuia pe setul de testare.
model.evaluate (X_test, y_test)
Funcția de evaluare va returna pierderea și acuratețea modelului. Modelul produce o precizie de 98%.
Utilizarea modelului pentru a vă clasifica propriile cifre scrise de mână
Pentru a vă clasifica propriile cifre scrise de mână, trebuie să vă pregătiți imaginile pentru a se potrivi cu cele ale setului de date MNIST. Dacă nu faceți acest lucru, modelul dvs. va avea performanțe slabe.
Pentru a preprocesa imaginile:
- Încărcați imaginea care conține cifra folosind OpenCV.
- Convertiți-l în tonuri de gri și redimensionați-l la 28 pe 28 de pixeli.
- Întoarceți și normalizați valorile pixelilor.
- În cele din urmă, aplatizați imaginea într-o matrice 1D.
Treceți imaginea preprocesată în model pentru predicție și imprimați valoarea prezisă pe ecran.
img = cv2.imread(„digits/digit1.png”, cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize (img, (28, 28))
img_flip = cv2.bitwise_not (img_resize)
img_normalized = img_flip.astype(„float32”) / 255.0# Aplatizați imaginea într-o matrice 1D
input_data = img_normalized.flatten().reshape( 1,28,28)
# Faceți o predicție folosind modelul
predicție = model.predict (input_data)
imprimare (f'Predicție: {np.argmax (predicție)}')
Transmiterea unei imagini preprocesate care conține un număr către model.
Rezultatul modelului este după cum urmează:
Modelul a reușit să clasifice corect cifra șapte.
Rețele neuronale în chatbot
Utilizarea rețelelor neuronale a explodat în ultimii ani. Ele au fost utilizate predominant în procesarea limbajului natural pentru traducerea limbii și IA generativă.
Mai recent, a existat o creștere a numărului de chatbot care pot comunica într-un mod asemănător omului. Ei folosesc un tip de rețea neuronală cunoscută sub numele de rețea neuronală transformatoare. Interacționează cu unii dintre ei și experimentează puterea rețelelor neuronale.