Neurónové siete sú dôležitým pojmom v oblasti umelej inteligencie a strojového učenia. Pozostávajú zo vzájomne prepojených uzlov, organizovaných vo vrstvách a napodobňujú fungovanie ľudského mozgu. Uzly predstavujú neuróny ľudského mozgu.
Môžete si vytvoriť svoju vlastnú jednoduchú doprednú neurónovú sieť klasifikácie viacerých tried. Naučte ho klasifikovať ručne písané číslice pomocou súboru údajov MNIST. Potom môžete použiť počítačové videnie na klasifikáciu vlastných ručne písaných číslic.
Čo je viactriedna klasifikácia?
Klasifikácia viacerých tried je typ strojového učenia, ktorý dokáže klasifikovať údaje do viac ako dvoch kategórií. Neurónové siete používajú klasifikátor softmax na rozdelenie pravdepodobnosti medzi možné triedy.
Na klasifikáciu ručne písaných obrázkov zo súboru údajov MNIST do 10 kategórií môžete použiť klasifikáciu viacerých tried. Tieto kategórie budú zodpovedať číslicam 0 až 9.
Pochopenie súboru údajov MNIST
Súbor údajov MNIST je populárny referenčný súbor údajov pre strojové učenie a algoritmy počítačového videnia. Obsahuje 70 000 ručne písaných obrázkov v odtieňoch šedej s rozmermi 28 x 28 pixelov. Ručne písané číslice sú v rozsahu 0 až 9.
Pred vytvorením akéhokoľvek modelu strojového učenia je dôležité pochopiť, čo váš súbor údajov obsahuje. Pochopenie množiny údajov vám umožní vykonávať lepšie predbežné spracovanie údajov.
Príprava vášho prostredia
Ak chcete postupovať podľa tohto návodu, mali by ste byť oboznámení s základy Pythonu. Mali by ste mať tiež a základné znalosti strojového učenia. Nakoniec by ste mali pohodlne používať Jupyter Notebook alebo Google Colab.
Úplný zdrojový kód je dostupný v a úložisko GitHub.
Vytvorte si nový Jupyter Notebook alebo sa prihláste Google Colab. Spustite tento príkaz na inštaláciu požadovaných balíkov:
!pip install numpy matplotlib tensorflow opencv-python
Budete používať:
- Matplotlib pre vizualizáciu údajov.
- NumPy na manipuláciu s poľami.
- TensorFlow na vytvorenie a trénovanie vášho modelu.
- OpenCV na načítanie modelu s vašimi vlastnými ručne písanými číslicami.
Import potrebných modulov
Importujte balíky, ktoré ste nainštalovali vo svojom prostredí. To vám umožní neskôr volať a používať ich funkcie a moduly vo vašom kóde.
importovať tensorflow ako tf
od tensorflow importovať keras
importovať matplotlib.pyplot ako plt
%matplotlib vložený
importovať numpy ako np
importovať cv2
Druhý riadok kódu importuje modul Keras z Knižnica Google TensorFlow. Keras použijete na trénovanie svojej hlbokej neurónovej siete s TensorFlow ako backendom.
Načítanie a zobrazenie množiny údajov
Súbor údajov MNIST je zabudovaný do Keras. Načítajte súbor údajov MNIST a rozdeľte ho na tréningové a testovacie súbory. Tréningovú sadu použijete na trénovanie svojho modelu a testovaciu sadu na vyhodnotenie presnosti vášho modelu pri klasifikácii nových neviditeľných obrázkov.
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
Skontrolujte dĺžku tréningových a testovacích sád. Súbor údajov MNIST má 60 000 obrázkov na tréning a 10 000 obrázkov na testovanie.
len (X_train)
len (X_test)
Skontrolujte tvar prvého obrázka v súbore údajov MNIST, ktorý by mal mať rozmery 28 x 28 pixelov. Potom vytlačte jeho hodnoty pixelov a vizualizujte ich pomocou Matplotlib.
X_train[0].tvar
X_train[0]
plt.matshow (X_train[0])
y_train[0]
Výstup vizualizácie je nasledovný:
Vizualizovaný obrázok ukazuje, že prvý obrázok v súbore údajov obsahuje číslo päť.
Predspracovanie údajov
Pred použitím údajov v množine údajov na trénovanie a testovanie modelu ich musíte predspracovať. Predspracovanie zvyšuje presnosť modelu štandardizáciou údajov.
Normalizácia hodnôt pixelov
Normalizujte hodnoty pixelov obrázkov v množine údajov vydelením každej hodnoty číslom 255. Hodnoty pixelov nenormalizovaného súboru údajov sa pohybujú od 0 do 255, pričom nula je čierna a 255 je biela. Delenie každej hodnoty pixelu číslom 255 zabezpečí, že každý pixel bude v rozsahu od 0 do 1. To uľahčuje modelu naučiť sa relevantné funkcie a vzory v údajoch.
X_train = X_train / 255
X_test = X_test / 255
Potom vytlačte hodnoty pixelov prvého obrázka.
X_train[0]
Všimnite si, že sú teraz v rozsahu medzi 0 a 1.
Konverzia obrazových matíc na 1D pole
Vstupná vrstva neurónovej siete vo všeobecnosti očakáva 1D vstupy, preto vytvorte 1D pole hodnôt pixelov obrázka. Ak to chcete urobiť, použite funkciu reshape() s počtom raws nastaveným na počet obrázkov v množine údajov.
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_train_flattened[0]
Vaše obrázky sú teraz pripravené na trénovanie a testovanie modelu.
Vytvorenie modelu hlbokej neurónovej siete
Vytvorte sekvenčný model pomocou modulu Keras Tensorflow pomocou vstupnej vrstvy, dvoch skrytých vrstiev a výstupnej vrstvy. Nastavte vstupný tvar na 28 x 28, pretože toto je tvar pôvodných obrázkov v množine údajov. Pre skryté vrstvy použite 128 uzlov. Výstupná vrstva by mala mať iba 10 neurónov, pretože klasifikujete iba číslice 0 až 9.
model = keras. Postupne ([
keras.vrstvy. Vyrovnať (input_shape=(28, 28)),keras.vrstvy. Husté(128, aktivácia='relu'),
keras.vrstvy. Husté(128, aktivácia='relu'),
keras.vrstvy. Husté(10, aktivácia="softmax")
])
Zostavte model pomocou adam optimalizátor, sparse_categorical_crossentropy ako stratová funkcia a metrika na vyhodnotenie výkonnosti modelu presnosť. Potom vložte tréningové dáta do modelu a nastavte počet epoch na päť.
model.compile (optimalizátor='adam',
strata ='sparse_categorical_crossentropy',
metriky=['presnosť'])
model.fit (X_train, y_train, epochs=5)
Cvičenie modelu zaberie pár minút. Po dokončení tréningu modelu vyhodnoťte jeho výkon na testovacej súprave.
model.evaluate (X_test, y_test)
Funkcia vyhodnotenia vráti stratu a presnosť modelu. Model produkuje presnosť 98%.
Použitie modelu na klasifikáciu vlastných ručne písaných číslic
Ak chcete klasifikovať svoje vlastné ručne písané číslice, musíte svoje obrázky pripraviť tak, aby sa zhodovali s obrázkami v súbore údajov MNIST. Ak tak neurobíte, váš model bude fungovať zle.
Predspracovanie obrázkov:
- Načítajte obrázok obsahujúci číslicu pomocou OpenCV.
- Preveďte ho do odtieňov sivej a zmeňte jeho veľkosť na 28 x 28 pixelov.
- Prevrátiť a normalizovať hodnoty pixelov.
- Nakoniec obrázok vyrovnajte do 1D poľa.
Vložte predspracovaný obrázok do modelu na predikciu a vytlačte predpokladanú hodnotu na obrazovku.
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# Vyrovnajte obrázok do 1D poľa
input_data = img_normalized.flatten().reshape( 1,28,28)
# Urobte predpoveď pomocou modelu
predpoveď = model.predict (vstupné_údaje)
vytlačiť (f'Prediction: {np.argmax (predpoveď)}')
Odovzdanie predspracovaného obrázku obsahujúceho číslo do modelu.
Výstup modelu je nasledovný:
Model dokázal správne zaradiť číslicu sedem.
Neurónové siete v chatbotoch
Používanie neurónových sietí v posledných rokoch explodovalo. Používali sa predovšetkým pri spracovaní prirodzeného jazyka na preklady jazykov a generatívnu AI.
Nedávno došlo k nárastu počtu chatbotov, ktorí dokážu komunikovať spôsobom podobným ľuďom. Používajú typ neurónovej siete známy ako transformátorová neurónová sieť. Interagujte s niektorými z nich a zažite silu neurónových sietí.