Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Nevronske mreže so pomemben koncept na področju umetne inteligence in strojnega učenja. Sestavljeni so iz med seboj povezanih vozlišč, organiziranih v plasteh, in posnemajo delovanje človeških možganov. Vozlišča predstavljajo nevrone človeških možganov.

Ustvarite lahko svojo preprosto nevronsko mrežo za večrazredno klasifikacijo s posredovanjem naprej. Usposobite ga za razvrščanje ročno napisanih števk z uporabo nabora podatkov MNIST. Nato lahko uporabite računalniški vid za razvrščanje lastnih ročno napisanih številk.

Kaj je večrazredna klasifikacija?

Večrazredna klasifikacija je vrsta strojnega učenja, ki lahko podatke razvrsti v več kot dve kategoriji. Nevronske mreže uporabljajo klasifikator softmax za porazdelitev verjetnosti po možnih razredih.

Za razvrščanje ročno napisanih slik iz nabora podatkov MNIST v 10 kategorij lahko uporabite večrazredno klasifikacijo. Te kategorije bodo ustrezale številkam od 0 do 9.

instagram viewer

Razumevanje nabora podatkov MNIST

Nabor podatkov MNIST je priljubljen primerjalni nabor podatkov za strojno učenje in algoritme računalniškega vida. Vsebuje 70.000 ročno napisanih sivinskih slik, ki so velike 28 x 28 slikovnih pik. Ročno napisane števke so v območju od 0 do 9.

Pred gradnjo katerega koli modela strojnega učenja je pomembno razumeti, kaj vsebuje vaš nabor podatkov. Razumevanje nabora podatkov vam bo omogočilo boljšo predobdelavo podatkov.

Priprava vašega okolja

Če želite slediti tej vadnici, morate poznati osnove Pythona. Imeti bi morali tudi a osnovno znanje strojnega učenja. Nenazadnje bi vam moralo biti udobno uporabljati Jupyter Notebook ali Google Colab.

Celotna izvorna koda je na voljo v a Repozitorij GitHub.

Ustvarite nov Jupyter Notebook ali se prijavite v Google Colab. Zaženite ta ukaz, da namestite zahtevane pakete:

!pip namestite numpy matplotlib tensorflow opencv-python

Uporabili boste:

  • Matplotlib za vizualizacijo podatkov.
  • NumPy za manipulacijo nizov.
  • TensorFlow za ustvarjanje in usposabljanje vašega modela.
  • OpenCV, da napolnite model z lastnimi ročno napisanimi številkami.

Uvoz potrebnih modulov

Uvozite pakete, ki ste jih namestili v svoje okolje. To vam bo omogočilo kasnejši klic in uporabo njihovih funkcij in modulov v vaši kodi.

uvoz tenzorski tok kot tf
od tenzorski tok uvoz keras
uvoz matplotlib.pyplot kot plt
%matplotlib v vrstici
uvoz numpy kot np
uvoz cv2

Druga vrstica kode uvozi modul Keras iz Knjižnica Google TensorFlow. Keras boste uporabili za usposabljanje vaše globoke nevronske mreže s TensorFlow kot zaledjem.

Nalaganje in ogled nabora podatkov

Nabor podatkov MNIST je vgrajen v Keras. Naložite nabor podatkov MNIST in ga razdelite na nize za usposabljanje in teste. Uporabili boste vadbeni niz za usposabljanje svojega modela, testni niz pa za oceno natančnosti vašega modela pri razvrščanju novih nevidenih slik.

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

Preverite dolžino vadbenih in testnih sklopov. Nabor podatkov MNIST vsebuje 60.000 slik za usposabljanje in 10.000 slik za testiranje.

len (X_vlak)
len (X_test)

Preverite obliko prve slike v naboru podatkov MNIST, ki mora biti velika 28 x 28 slikovnih pik. Nato natisnite njegove vrednosti slikovnih pik in jih vizualizirajte z Matplotlib.

X_vlak[0].oblika
X_vlak[0]
plt.matshow (X_train[0])
y_vlak[0]

Izhod vizualizacije je naslednji:

Vizualizirana slika kaže, da prva slika v naboru podatkov vsebuje številko pet.

Predhodna obdelava podatkov

Pred uporabo podatkov v naboru podatkov za usposabljanje in testiranje vašega modela, jih morate predhodno obdelati. Predhodna obdelava poveča natančnost modela s standardizacijo podatkov.

Normalizacija vrednosti slikovnih pik

Normalizirajte vrednosti slikovnih pik slik v naboru podatkov tako, da vsako vrednost delite z 255. Vrednosti slikovnih pik nenormaliziranega nabora podatkov segajo od 0 do 255, pri čemer je nič črna in 255 bela. Če vsako slikovno piko delimo z 255, zagotovimo, da je vsaka slikovna pika v območju med 0 in 1. Tako se model lažje nauči ustreznih funkcij in vzorcev v podatkih.

X_vlak = X_vlak / 255
X_test = X_test / 255

Nato natisnite vrednosti slikovnih pik prve slike.

X_vlak[0]

Upoštevajte, da so zdaj v območju med 0 in 1.

Pretvorba slikovnih matrik v 1D niz

Vhodna plast nevronske mreže na splošno pričakuje 1D vnose, zato ustvarite 1D niz vrednosti pikslov slike. Če želite to narediti, uporabite funkcijo reshape() s številom neobdelanih datotek, nastavljenim na število slik v naboru podatkov.

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 slike so zdaj pripravljene za usposabljanje in testiranje modela.

Ustvarjanje modela globoke nevronske mreže

Ustvarite zaporedni model z modulom Keras podjetja Tensorflow z uporabo vhodne plasti, dveh skritih plasti in izhodne plasti. Vhodno obliko nastavite na 28 x 28, saj je to oblika izvirnih slik v naboru podatkov. Za skrite plasti uporabite 128 vozlišč. Izhodna plast mora imeti samo 10 nevronov, saj razvrščate samo števke od 0 do 9.

model = keras. Zaporedno ([
keras.plasti. Splošči (input_shape=(28, 28)),

keras.plasti. Gosto(128, aktivacija='relu'),
keras.plasti. Gosto(128, aktivacija='relu'),

keras.plasti. Gosto(10, aktivacija='softmax')
])

Sestavite model z uporabo adam optimizator, redka_kategorična_krizentropija kot funkcija izgube in metrika za oceno uspešnosti modela natančnost. Nato prilagodite podatke o usposabljanju v model in nastavite število epoh na pet.

model.compile (optimizator='adam',
izguba='sparse_categorical_crossentropy',
metrics=['natančnost'])

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

Urjenje modela bo trajalo nekaj minut. Po končanem usposabljanju modela ocenite njegovo delovanje na testnem nizu.

model.evaluate (X_test, y_test)

Funkcija evalvacije bo vrnila izgubo in natančnost modela. Model zagotavlja natančnost 98%.

Uporaba modela za razvrščanje lastnih ročno napisanih številk

Če želite razvrstiti lastne ročno napisane številke, morate pripraviti svoje slike, da bodo ustrezale tistim iz nabora podatkov MNIST. Če tega ne storite, bo vaš model deloval slabo.

Za predhodno obdelavo slik:

  1. S pomočjo OpenCV naložite sliko, ki vsebuje številko.
  2. Pretvorite ga v sivine in mu spremenite velikost na 28 x 28 slikovnih pik.
  3. Obrnite in normalizirajte vrednosti slikovnih pik.
  4. Na koncu sploščite sliko v 1D niz.

Predhodno obdelano sliko prenesite v model za predvidevanje in natisnite predvideno vrednost na zaslonu.

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

# Sploščite sliko v 1D niz
vhodni_podatki = img_normalized.flatten().reshape( 1,28,28)

# Naredite napoved z uporabo modela
napoved = model.predict (vhodni_podatki)
tiskanje (f'Napoved: {np.argmax (napoved)}')

Posredovanje vnaprej obdelane slike, ki vsebuje številko, modelu.

Rezultat modela je naslednji:

Model je lahko pravilno razvrstil številko sedem.

Nevronske mreže v klepetalnih robotih

Uporaba nevronskih mrež je v zadnjih nekaj letih eksplodirala. Uporabljali so jih predvsem pri obdelavi naravnega jezika za prevajanje jezikov in generativno umetno inteligenco.

V zadnjem času se je povečalo število klepetalnih robotov, ki lahko komunicirajo na človeški način. Uporabljajo vrsto nevronske mreže, znano kot transformatorska nevronska mreža. Sodelujte z nekaterimi od njih in izkusite moč nevronskih mrež.