Neuronske mreže važan su koncept u području umjetne inteligencije i strojnog učenja. Sastoje se od međusobno povezanih čvorova, organiziranih u slojeve, i oponašaju rad ljudskog mozga. Čvorovi predstavljaju neurone ljudskog mozga.
Možete izraditi vlastitu jednostavnu neuronsku mrežu klasifikacije s više klasa. Obučite ga da klasificira rukom pisane znamenke pomoću skupa podataka MNIST. Zatim možete koristiti računalni vid za klasificiranje vlastitih rukom pisanih znamenki.
Što je višeklasna klasifikacija?
Klasifikacija u više klasa je vrsta strojnog učenja koja može klasificirati podatke u više od dvije kategorije. Neuronske mreže koriste softmax klasifikator za distribuciju vjerojatnosti preko mogućih klasa.
Možete koristiti višeklasnu klasifikaciju za klasificiranje rukom pisanih slika iz skupa podataka MNIST-a u 10 kategorija. Ove kategorije će odgovarati znamenkama od 0 do 9.
Razumijevanje MNIST skupa podataka
Skup podataka MNIST popularan je referentni skup podataka za strojno učenje i algoritme računalnog vida. Sadrži 70 000 rukom pisanih slika u sivim tonovima veličine 28 x 28 piksela. Rukopisne znamenke su u rasponu od 0 do 9.
Prije izgradnje bilo kakvog modela strojnog učenja, važno je razumjeti što sadrži vaš skup podataka. Razumijevanje skupa podataka omogućit će vam bolju pretprocesiranje podataka.
Priprema vaše okoline
Da biste pratili ovaj vodič, trebali biste biti upoznati s osnove Pythona. Također biste trebali imati a osnovno znanje strojnog učenja. Konačno, trebalo bi vam biti udobno koristiti Jupyter Notebook ili Google Colab.
Puni izvorni kod dostupan je u a GitHub spremište.
Stvorite novu Jupyter bilježnicu ili se prijavite na Google Colab. Pokrenite ovu naredbu da instalirate potrebne pakete:
!pip instalirajte numpy matplotlib tensorflow opencv-python
Koristit ćete:
- Matplotlib za vizualizaciju podataka.
- NumPy za manipuliranje nizovima.
- TensorFlow za izradu i obuku vašeg modela.
- OpenCV za punjenje modela vlastitim rukom pisanim znamenkama.
Uvoz potrebnih modula
Uvezite pakete koje ste instalirali u svoje okruženje. To će vam omogućiti kasnije pozivanje i korištenje njihovih funkcija i modula u vašem kodu.
uvoz tenzorski tok kao tf
iz tenzorski tok uvoz keras
uvoz matplotlib.pyplot kao plt
%matplotlib inline
uvoz numpy kao np
uvoz cv2
Drugi redak koda uvozi Keras modul iz Google TensorFlow biblioteka. Koristit ćete Keras za treniranje svoje duboke neuronske mreže s TensorFlowom kao pozadinom.
Učitavanje i pregled skupa podataka
Skup podataka MNIST ugrađen je u Keras. Učitajte MNIST skup podataka i podijelite ga na skupove za obuku i test. Koristit ćete set za obuku za obuku vašeg modela i set za testiranje za procjenu točnosti vašeg modela u klasificiranju novih neviđenih slika.
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
Provjerite duljinu treninga i testova. MNIST skup podataka ima 60 000 slika za obuku i 10 000 slika za testiranje.
dužina (X_vlak)
dužina (X_test)
Provjerite oblik prve slike u MNIST skupu podataka koja bi trebala biti 28 puta 28 piksela. Zatim ispišite njegove vrijednosti piksela i vizualizirajte ga pomoću Matplotliba.
X_vlak[0].oblik
X_vlak[0]
plt.matshow (X_vlak[0])
y_vlak[0]
Izlaz vizualizacije je sljedeći:
Vizualizirana slika pokazuje da prva slika u skupu podataka sadrži broj pet.
Predobrada podataka
Prije upotrebe podataka u skupu podataka za obuku i testiranje vašeg modela, morate ga prethodno obraditi. Predobrada poboljšava točnost modela standardizacijom podataka.
Normaliziranje vrijednosti piksela
Normalizirajte vrijednosti piksela slika u skupu podataka dijeljenjem svake vrijednosti s 255. Vrijednosti piksela nenormaliziranog skupa podataka u rasponu su od 0 do 255, pri čemu je nula crna, a 255 bijela. Dijeljenje svake vrijednosti piksela s 255 osigurava da je svaki piksel u rasponu između 0 i 1. To modelu olakšava učenje relevantnih značajki i obrazaca u podacima.
X_vlak = X_vlak / 255
X_test = X_test / 255
Zatim ispišite vrijednosti piksela prve slike.
X_vlak[0]
Primijetite da su sada u rasponu između 0 i 1.
Pretvaranje slikovnih matrica u 1D niz
Ulazni sloj neuronske mreže općenito očekuje 1D ulaze, stoga stvorite 1D niz vrijednosti piksela slike. Da biste to učinili, upotrijebite funkciju reshape() s brojem rawova postavljenim na broj slika u skupu podataka.
X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (len (X_test), 28 * 28)
X_vlak_spljošten.oblik
X_vlak_spljošten[0]
Vaše su slike sada spremne za obuku i testiranje modela.
Stvaranje modela duboke neuronske mreže
Stvorite sekvencijalni model s Tensorflowovim Keras modulom koristeći ulazni sloj, dva skrivena sloja i izlazni sloj. Postavite ulazni oblik na 28 x 28 jer je to oblik izvornih slika u skupu podataka. Koristite 128 čvorova za skrivene slojeve. Izlazni sloj trebao bi imati samo 10 neurona jer klasificirate samo znamenke od 0 do 9.
model = keras. Sekvencijalno([
keras.slojevi. Spljošti (input_shape=(28, 28)),keras.slojevi. Gusta(128, aktivacija='relu'),
keras.slojevi. Gusta(128, aktivacija='relu'),
keras.slojevi. Gusta(10, aktivacija='softmax')
])
Sastavite model pomoću Adam optimizator, rijetka_kategorička_krossentropija kao funkcija gubitka i metrika za procjenu izvedbe modela točnost. Zatim uklopite podatke o obuci u model i postavite broj epoha na pet.
model.kompilacija (optimizator='Adam',
gubitak='sparse_categorical_crossentropy',
metrika=['točnost'])
model.fit (X_vlak, y_vlak, epohe=5)
Model će trebati nekoliko minuta za treniranje. Nakon završetka obuke modela, procijenite njegovu izvedbu na ispitnom setu.
model.evaluate (X_test, y_test)
Funkcija evaluate vratit će gubitak i točnost modela. Model proizvodi točnost od 98%.
Korištenje modela za klasifikaciju vlastitih rukom pisanih znamenki
Da biste klasificirali svoje rukom pisane znamenke, trebate pripremiti svoje slike da odgovaraju onima iz skupa podataka MNIST-a. Ako to ne učinite, vaš će model raditi loše.
Za prethodnu obradu slika:
- Učitajte sliku koja sadrži znamenku koristeći OpenCV.
- Pretvorite ga u sive tonove i promijenite mu veličinu na 28 x 28 piksela.
- Okrenite i normalizirajte vrijednosti piksela.
- Na kraju izravnajte sliku u 1D polje.
Proslijedite prethodno obrađenu sliku u model za predviđanje i ispišite predviđenu vrijednost na ekranu.
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# Spljoštite sliku u 1D polje
ulazni_podaci = img_normalized.flatten().reshape( 1,28,28)
# Napravite predviđanje pomoću modela
predviđanje = model.predviđanje (ulazni_podaci)
ispisati (f'Predviđanje: {np.argmax (predviđanje)}')
Prosljeđivanje prethodno obrađene slike koja sadrži broj modelu.
Izlaz modela je sljedeći:
Model je uspio točno klasificirati brojku sedam.
Neuronske mreže u chatbotovima
Upotreba neuronskih mreža eksplodirala je u posljednjih nekoliko godina. Uglavnom su korišteni u obradi prirodnog jezika za prijevod jezika i generativne umjetne inteligencije.
Nedavno je došlo do porasta broja chatbota koji mogu komunicirati na ljudski način. Oni koriste vrstu neuronske mreže poznatu kao transformatorska neuronska mreža. Komunicirajte s nekima od njih i iskusite snagu neuronskih mreža.