Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

Neuroverkot ovat tärkeä käsite tekoälyn ja koneoppimisen aloilla. Ne koostuvat toisiinsa liitetyistä solmuista, jotka on järjestetty kerroksiin ja jäljittelevät ihmisen aivojen toimintaa. Solmut edustavat ihmisen aivojen hermosoluja.

Voit luoda oman yksinkertaisen eteenpäin syötettävän, moniluokkaisen luokituksen hermoverkkosi. Opeta se luokittelemaan käsinkirjoitetut numerot MNIST-tietojoukon avulla. Voit sitten käyttää tietokonenäköä omien käsinkirjoitettujen numeroidesi luokitteluun.

Mikä on moniluokkaluokitus?

Moniluokkaluokitus on koneoppimisen tyyppi, joka voi luokitella tiedot useampaan kuin kahteen luokkaan. Neuroverkot käyttävät softmax-luokittajaa todennäköisyyksien jakamiseen mahdollisille luokille.

Voit käyttää moniluokkaista luokittelua MNIST-tietojoukon käsinkirjoitettujen kuvien luokitteluun 10 luokkaan. Nämä luokat vastaavat numeroita 0-9.

instagram viewer

MNIST-tietojoukon ymmärtäminen

MNIST-tietojoukko on suosittu koneoppimisen ja tietokonenäköalgoritmien vertailutietojoukko. Se sisältää 70 000 harmaasävyistä käsinkirjoitettua kuvaa, joiden koko on 28 x 28 pikseliä. Käsinkirjoitetut numerot ovat välillä 0-9.

Ennen kuin luot koneoppimismallin, on tärkeää ymmärtää, mitä tietojoukkosi sisältää. Tietojoukon ymmärtäminen mahdollistaa paremman tietojen esikäsittelyn.

Ympäristösi valmistelu

Jotta voit seurata tätä opetusohjelmaa, sinun tulee tuntea Pythonin perusteet. Sinulla pitäisi olla myös a koneoppimisen perustiedot. Lopuksi sinun pitäisi osata käyttää Jupyter Notebookia tai Google Colabia.

Täysi lähdekoodi on saatavilla a GitHub-arkisto.

Luo uusi Jupyter-muistikirja tai kirjaudu sisään Google Colab. Suorita tämä komento asentaaksesi tarvittavat paketit:

!pip install numpy matplotlib tensorflow opencv-python

Käytät:

  • Matplotlib tietojen visualisointiin.
  • NumPy käsitellä taulukoita.
  • TensorFlow luoda ja kouluttaa malliasi.
  • OpenCV syöttää malliin omilla käsin kirjoitetuilla numeroilla.

Tarvittavien moduulien tuonti

Tuo ympäristöösi asentamasi paketit. Näin voit soittaa myöhemmin ja käyttää niiden toimintoja ja moduuleja koodissasi.

tuonti tensorflow kuten tf
alkaen tensorflow tuonti keras
tuonti matplotlib.pyplot kuten plt
%matplotlib rivissä
tuonti nuhjuinen kuten np
tuonti cv2

Toinen koodirivi tuo Keras-moduulin tiedostosta Google TensorFlow -kirjasto. Käytät Kerasta syvän neuroverkkosi harjoittamiseen TensorFlow-taustana.

Tietojoukon lataaminen ja katselu

MNIST-tietojoukko on sisäänrakennettu Kerasiin. Lataa MNIST-tietojoukko ja jaa se harjoitus- ja testisarjoiksi. Käytät harjoitussarjaa mallisi kouluttamiseen ja testisarjaa mallin tarkkuuden arvioimiseen uusien näkymättömien kuvien luokittelussa.

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

Tarkista harjoitus- ja testisarjojen pituus. MNIST-tietojoukossa on 60 000 kuvaa harjoitteluun ja 10 000 kuvaa testaukseen.

len (X_train)
len (X_testi)

Tarkista MNIST-tietojoukon ensimmäisen kuvan muoto, jonka tulee olla 28 x 28 pikseliä. Tulosta sitten sen pikseliarvot ja visualisoi se Matplotlibillä.

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

Visualisoinnin tulos on seuraava:

Visualisoitu kuva osoittaa, että tietojoukon ensimmäinen kuva sisältää numeron viisi.

Tietojen esikäsittely

Ennen kuin käytät tietojoukon tietoja mallin kouluttamiseen ja testaamiseen, sinun on esikäsiteltävä se. Esikäsittely parantaa mallin tarkkuutta standardoimalla tiedot.

Pikseliarvojen normalisointi

Normalisoi tietojoukon kuvien pikseliarvot jakamalla kukin arvo 255:llä. Normalisoimattoman tietojoukon pikseliarvot vaihtelevat välillä 0–255, jolloin nolla on musta ja 255 on valkoinen. Kunkin pikselin arvon jakaminen 255:llä varmistaa, että jokainen pikseli on välillä 0–1. Tämän ansiosta mallin on helpompi oppia datan olennaiset ominaisuudet ja mallit.

X_train = X_train / 255
X_test = X_test / 255

Tulosta sitten ensimmäisen kuvan pikseliarvot.

X_train[0]

Huomaa, että ne ovat nyt välillä 0 ja 1.

Kuvamatriisien muuntaminen 1D-taulukoksi

Neuraaliverkon syöttökerros odottaa yleensä 1D-tuloja, joten luo 1D-taulukko kuvan pikseliarvoista. Voit tehdä tämän käyttämällä reshape()-funktiota, jossa raaka-aineiden määrä on asetettu tietojoukon kuvien lukumääräksi.

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]

Kuvasi ovat nyt valmiita mallin harjoitteluun ja testaamiseen.

Deep Neural Network -mallin luominen

Luo peräkkäinen malli Tensorflown Keras-moduulilla käyttämällä syöttökerrosta, kahta piilotettua kerrosta ja tulostekerrosta. Aseta syötemuodoksi 28 x 28, koska tämä on tietojoukon alkuperäisten kuvien muoto. Käytä 128 solmua piilotetuille tasoille. Lähtökerroksessa tulisi olla vain 10 neuronia, koska luokittelet vain numeroita 0-9.

malli = keras. Sequential([
keras.layers. Litistä (input_shape=(28, 28)),

keras.layers. Tiheä(128, aktivointi ='relu'),
keras.layers. Tiheä(128, aktivointi ='relu'),

keras.layers. Tiheä(10, aktivointi ="softmax")
])

Kokoa malli käyttämällä adam optimoija, harva_kategorinen_ristikkäisyys häviöfunktiona ja mittarina mallin suorituskyvyn arvioimiseksi tarkkuus. Sovita sitten harjoitustiedot malliin ja aseta jaksojen lukumääräksi viisi.

model.compile (optimizer='adam',
tappio ='sparse_categorical_crossentropy',
metrics=['tarkkuus'])

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

Mallin harjoittelu kestää muutaman minuutin. Kun mallin koulutus on päättynyt, arvioi sen suorituskyky testisarjassa.

model.evaluate (X_test, y_test)

Arviointifunktio palauttaa mallin häviön ja tarkkuuden. Malli tuottaa 98 prosentin tarkkuuden.

Mallin käyttäminen omien käsinkirjoitettujen numeroidesi luokittelemiseen

Jotta voit luokitella omat käsinkirjoitetut numerosi, sinun on valmisteltava kuvat vastaamaan MNIST-tietojoukon kuvia. Jos näin ei tehdä, mallisi toimii huonosti.

Kuvien esikäsittely:

  1. Lataa numeron sisältävä kuva OpenCV: llä.
  2. Muunna se harmaasävyiksi ja muuta sen koko 28 x 28 pikseliksi.
  3. Käännä ja normalisoi pikseliarvot.
  4. Tasoita lopuksi kuva 1D-matriiseksi.

Ohjaa esikäsitelty kuva malliin ennustamista varten ja tulosta ennustettu arvo näytölle.

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

# Tasoita kuva 1D-matriiseksi
input_data = img_normalized.flatten().reshape( 1,28,28)

# Tee ennuste mallin avulla
ennuste = malli.ennustus (syöttötiedot)
Tulosta (f'Ennustus: {np.argmax (ennustus)}')

Numeron sisältävän esikäsitellyn kuvan välittäminen mallille.

Mallin tulos on seuraava:

Malli pystyi luokittelemaan numeron seitsemän oikein.

Neuraaliverkot chatboteissa

Neuroverkkojen käyttö on kasvanut räjähdysmäisesti viime vuosina. Niitä on käytetty pääasiassa luonnollisen kielen käsittelyssä kielten kääntämiseen ja generatiiviseen tekoälyyn.

Viime aikoina on lisääntynyt sellaisten chatbottien määrä, jotka voivat kommunikoida ihmisen kaltaisella tavalla. He käyttävät eräänlaista neuroverkkoa, joka tunnetaan muuntajan hermoverkkona. Ole vuorovaikutuksessa joidenkin heistä ja koe hermoverkkojen voima.