Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Neuronové sítě jsou důležitým pojmem v oblasti umělé inteligence a strojového učení. Skládají se z propojených uzlů, organizovaných ve vrstvách a napodobují, jak funguje lidský mozek. Uzly představují neurony lidského mozku.

Můžete si vytvořit svou vlastní jednoduchou dopřednou, vícetřídní klasifikační neuronovou síť. Naučte jej klasifikovat ručně psané číslice pomocí datové sady MNIST. Pomocí počítačového vidění pak můžete klasifikovat své vlastní ručně psané číslice.

Co je vícetřídní klasifikace?

Vícetřídní klasifikace je typ strojového učení, který dokáže klasifikovat data do více než dvou kategorií. Neuronové sítě používají klasifikátor softmax k rozdělení pravděpodobnosti mezi možné třídy.

K klasifikaci ručně psaných obrázků z datové sady MNIST můžete použít vícetřídní klasifikaci do 10 kategorií. Tyto kategorie budou odpovídat číslicím 0 až 9.

instagram viewer

Pochopení datové sady MNIST

Datový soubor MNIST je populární srovnávací datový soubor pro strojové učení a algoritmy počítačového vidění. Obsahuje 70 000 ručně psaných obrázků ve stupních šedi o velikosti 28 x 28 pixelů. Ručně psané číslice jsou v rozsahu 0 až 9.

Před vytvořením jakéhokoli modelu strojového učení je důležité pochopit, co vaše datová sada obsahuje. Pochopení datové sady vám umožní provádět lepší předběžné zpracování dat.

Příprava vašeho prostředí

Abyste mohli postupovat podle tohoto návodu, měli byste být obeznámeni s základy Pythonu. Měli byste mít také a základní znalost strojového učení. Nakonec byste měli být spokojeni s používáním Jupyter Notebook nebo Google Colab.

Úplný zdrojový kód je k dispozici v a úložiště GitHub.

Vytvořte nový Jupyter Notebook nebo se přihlaste Google Colab. Spuštěním tohoto příkazu nainstalujte požadované balíčky:

!pip install numpy matplotlib tensorflow opencv-python

Budete používat:

  • Matplotlib pro vizualizaci dat.
  • NumPy pro manipulaci s poli.
  • TensorFlow k vytvoření a trénování vašeho modelu.
  • OpenCV pro naplnění modelu vašimi vlastními ručně psanými číslicemi.

Import nezbytných modulů

Importujte balíčky, které jste nainstalovali ve vašem prostředí. To vám umožní později volat a používat jejich funkce a moduly ve vašem kódu.

import tensorflow tak jako tf
z tensorflow import keras
import matplotlib.pyplot tak jako plt
%matplotlib vložený
import nemotorný tak jako np
import cv2

Druhý řádek kódu importuje modul Keras z Knihovna Google TensorFlow. Keras použijete k trénování své hluboké neuronové sítě s TensorFlow jako backendem.

Načítání a prohlížení datové sady

Datová sada MNIST je zabudována do Keras. Načtěte datovou sadu MNIST a rozdělte ji na trénovací a testovací sady. Tréninkovou sadu použijete k trénování modelu a testovací sadu k vyhodnocení přesnosti vašeho modelu při klasifikaci nových neviditelných snímků.

(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()

Zkontrolujte délku tréninkových a testovacích sad. Datový soubor MNIST obsahuje 60 000 snímků pro trénink a 10 000 snímků pro testování.

len (X_train)
len (X_test)

Zkontrolujte tvar prvního obrázku v datové sadě MNIST, který by měl mít rozměry 28 x 28 pixelů. Poté vytiskněte jeho hodnoty pixelů a vizualizujte je pomocí Matplotlib.

X_train[0].tvar
X_train[0]
plt.matshow (X_train[0])
y_train[0]

Výstup vizualizace je následující:

Vizualizovaný obrázek ukazuje, že první obrázek v datové sadě obsahuje číslo pět.

Předzpracování dat

Než použijete data v datové sadě k trénování a testování modelu, musíte jej předběžně zpracovat. Předzpracování zvyšuje přesnost modelu standardizací dat.

Normalizace hodnot pixelů

Normalizujte hodnoty pixelů obrázků v datové sadě vydělením každé hodnoty 255. Hodnoty pixelů nenormalizované datové sady se pohybují od 0 do 255, přičemž nula je černá a 255 je bílá. Vydělením hodnoty každého pixelu 255 zajistíte, že každý pixel bude v rozsahu mezi 0 a 1. To usnadňuje modelu naučit se relevantní funkce a vzory v datech.

X_train = X_train / 255
X_test = X_test / 255

Poté vytiskněte hodnoty pixelů prvního obrázku.

X_train[0]

Všimněte si, že jsou nyní v rozsahu mezi 0 a 1.

Převod obrazových matic na 1D pole

Vstupní vrstva neuronové sítě obecně očekává 1D vstupy, takže vytvořte 1D pole hodnot pixelů obrázku. K tomu použijte funkci reshape() s počtem rawů nastaveným na počet obrázků v datové sadě.

X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (délka (X_test), 28 * 28)
X_train_flattened.shape
X_train_flattened[0]

Vaše obrázky jsou nyní připraveny k trénování a testování modelu.

Vytvoření modelu hluboké neuronové sítě

Vytvořte sekvenční model pomocí modulu Keras Tensorflow pomocí vstupní vrstvy, dvou skrytých vrstev a výstupní vrstvy. Nastavte vstupní tvar na 28 x 28, protože to je tvar původních obrázků v datové sadě. Pro skryté vrstvy použijte 128 uzlů. Výstupní vrstva by měla mít pouze 10 neuronů, protože klasifikujete pouze číslice 0 až 9.

model = keras. Sekvenční([
keras.vrstvy. Zploštit (input_shape=(28, 28)),

keras.vrstvy. Hustý(128, aktivace='relu'),
keras.vrstvy. Hustý(128, aktivace='relu'),

keras.vrstvy. Hustý(10, aktivace='softmax')
])

Zkompilujte model pomocí adam optimalizátor, sparse_categorical_crossentropy jako ztrátová funkce a metrika pro hodnocení výkonnosti modelu přesnost. Poté vložte trénovací data do modelu a nastavte počet epoch na pět.

model.compile (optimalizátor='adam',
ztráta ='sparse_categorical_crossentropy',
metriky=['přesnost'])

model.fit (X_train, y_train, epochs=5)

Cvičení modelu zabere několik minut. Po dokončení tréninku modelu vyhodnoťte jeho výkon na testovací sadě.

model.evaluate (X_test, y_test)

Funkce vyhodnocení vrátí ztrátu a přesnost modelu. Model produkuje přesnost 98 %.

Použití modelu ke klasifikaci vlastních ručně psaných číslic

Chcete-li klasifikovat své vlastní ručně psané číslice, musíte své obrázky připravit tak, aby odpovídaly těm z datové sady MNIST. Pokud tak neučiníte, bude váš model fungovat špatně.

Postup předzpracování obrázků:

  1. Načtěte obrázek obsahující číslici pomocí OpenCV.
  2. Převeďte jej na stupně šedi a změňte jeho velikost na 28 x 28 pixelů.
  3. Překlopte a normalizujte hodnoty pixelů.
  4. Nakonec obrázek srovnejte do 1D pole.

Předejte předzpracovaný obrázek do modelu pro predikci a vytiskněte předpokládanou 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

# Srovnejte obrázek do 1D pole
input_data = img_normalized.flatten().reshape( 1,28,28)

# Proveďte předpověď pomocí modelu
předpověď = model.predict (vstupní_data)
tisk (f'Prediction: {np.argmax (předpověď)}')

Předání předem zpracovaného obrázku obsahujícího číslo do modelu.

Výstup modelu je následující:

Model dokázal správně zařadit číslici sedm.

Neuronové sítě v chatbotech

Použití neuronových sítí v posledních několika letech explodovalo. Používaly se převážně při zpracování přirozeného jazyka pro jazykový překlad a generativní AI.

V poslední době se zvýšil počet chatbotů, kteří mohou komunikovat způsobem podobným lidem. Používají typ neuronové sítě známé jako transformátorová neuronová síť. Interagujte s některými z nich a vyzkoušejte sílu neuronových sítí.