Närvivõrgud on tehisintellekti ja masinõppe valdkondades oluline mõiste. Need koosnevad omavahel ühendatud sõlmedest, mis on organiseeritud kihtidena ja jäljendavad inimese aju tööd. Sõlmed esindavad inimese aju neuroneid.
Saate luua oma lihtsa edasisaatva mitme klassi klassifikatsiooniga närvivõrgu. Treenige seda käsitsi kirjutatud numbrite klassifitseerimiseks MNIST-andmestiku abil. Seejärel saate arvutinägemise abil oma käsitsi kirjutatud numbrid klassifitseerida.
Mis on mitme klassi klassifikatsioon?
Mitme klassi klassifikatsioon on masinõppe tüüp, mis võib liigitada andmeid rohkem kui kahte kategooriasse. Neuraalvõrgud kasutavad klassifikaatorit softmax, et jagada tõenäosust võimalike klasside vahel.
Saate kasutada mitme klassi klassifikatsiooni, et liigitada käsitsi kirjutatud kujutised MNIST-i andmestikust 10 kategooriasse. Need kategooriad vastavad numbritele 0 kuni 9.
MNIST-i andmestiku mõistmine
MNIST-i andmestik on masinõppe ja arvutinägemise algoritmide jaoks populaarne võrdlusandmekogum. See sisaldab 70 000 halltoonides käsitsi kirjutatud pilti, mille suurus on 28 x 28 pikslit. Käsitsi kirjutatud numbrid on vahemikus 0 kuni 9.
Enne mis tahes masinõppemudeli loomist on oluline mõista, mida teie andmestik sisaldab. Andmestiku mõistmine võimaldab teil paremini andmeid eeltöötleda.
Teie keskkonna ettevalmistamine
Selle õpetuse järgimiseks peaksite olema tuttav Pythoni põhitõed. Teil peaks olema ka a algteadmised masinõppest. Lõpuks peaksite olema mugav kasutada Jupyteri sülearvutit või Google Colabi.
Täielik lähtekood on saadaval a GitHubi hoidla.
Looge uus Jupyteri märkmik või logige sisse Google Colab. Käivitage see käsk vajalike pakettide installimiseks:
!pip install numpy matplotlib tensorflow opencv-python
Kasutate:
- Matplotlib andmete visualiseerimiseks.
- NumPy massiividega manipuleerimiseks.
- TensorFlow oma mudeli loomiseks ja koolitamiseks.
- OpenCV, et toita mudelit teie enda käsitsi kirjutatud numbritega.
Vajalike moodulite importimine
Importige oma keskkonda installitud paketid. See võimaldab teil hiljem helistada ja kasutada oma koodis nende funktsioone ja mooduleid.
importida tensorflow nagu tf
alates tensorflow importida keras
importida matplotlib.pyplot nagu plt
%matplotlib reas
importida tuim nagu np
importida cv2
Teine koodirida impordib Kerase mooduli rakendusest Google TensorFlow teek. Kasutate Kerast oma sügava närvivõrgu treenimiseks, taustaprogrammina TensorFlow.
Andmestiku laadimine ja vaatamine
MNIST-i andmestik on Kerasse sisse ehitatud. Laadige MNIST-i andmestik ja jagage see treening- ja testikomplektideks. Kasutate koolituskomplekti oma mudeli koolitamiseks ja testikomplekti, et hinnata oma mudeli täpsust uute nähtamatute piltide klassifitseerimisel.
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()
Kontrolli treening- ja testikomplektide pikkust. MNIST-i andmestikul on 60 000 pilti treenimiseks ja 10 000 pilti testimiseks.
len (X_train)
len (X_test)
Kontrollige MNIST-i andmestiku esimese pildi kuju, mis peaks olema 28 x 28 pikslit. Seejärel printige selle piksliväärtused ja visualiseerige see Matplotlibi abil.
X_train[0].kuju
X_train[0]
plt.matshow (X_train[0])
y_train[0]
Visualiseerimise väljund on järgmine:
Visualiseeritud pilt näitab, et andmestiku esimene pilt sisaldab numbrit viis.
Andmete eeltöötlus
Enne andmestiku andmete kasutamist mudeli koolitamiseks ja testimiseks peate need eeltöötlema. Eeltöötlus suurendab mudeli täpsust, standardiseerides andmeid.
Piksliväärtuste normaliseerimine
Normaliseerige andmekogus olevate piltide piksliväärtused, jagades iga väärtuse 255-ga. Normaliseerimata andmestiku pikslite väärtused on vahemikus 0 kuni 255, kus null on must ja 255 on valge. Iga piksli väärtuse jagamine 255-ga tagab, et iga piksel jääb vahemikku 0–1. See muudab mudeli jaoks andmete asjakohaste funktsioonide ja mustrite õppimise lihtsamaks.
X_train = X_train / 255
X_test = X_test / 255
Seejärel printige esimese pildi piksliväärtused.
X_train[0]
Pange tähele, et need on nüüd vahemikus 0 kuni 1.
Pildimaatriksite teisendamine 1D-massiiviks
Närvivõrgu sisendkiht eeldab üldiselt 1D-sisendeid, seega looge pildi piksliväärtustest 1D massiiv. Selleks kasutage funktsiooni reshape(), mille toorväärtuste arv on seatud andmekogus olevate piltide arvule.
X_train_flattened = X_train.reshape (len (X_train), 28 * 28)
X_test_flattened = X_test.reshape (len (X_test), 28 * 28)
X_train_lapandatud.kuju
X_train_flattened[0]
Teie pildid on nüüd mudeli treenimiseks ja testimiseks valmis.
Sügava närvivõrgu mudeli loomine
Looge Tensorflow Kerase mooduliga järjestusmudel, kasutades sisendkihti, kahte peidetud kihti ja väljundkihti. Määrake sisendkujuks 28 x 28, kuna see on andmestiku algsete kujutiste kuju. Kasutage peidetud kihtide jaoks 128 sõlme. Väljundkihis peaks olema ainult 10 neuronit, kuna klassifitseerite ainult numbreid 0 kuni 9.
mudel = keras. Sequential([
keras.kihid. Tasandage (input_shape=(28, 28)),keras.kihid. Tihe(128, aktiveerimine='relu'),
keras.kihid. Tihe(128, aktiveerimine='relu'),
keras.kihid. Tihe(10, aktiveerimine='softmax')
])
Koostage mudel kasutades aadam optimeerija, hõre_kategooriline_ristsoopia kaotusfunktsioonina ja mõõdikuna mudeli toimivuse hindamiseks täpsust. Seejärel sobitage treeninguandmed mudelisse ja määrake epohhide arvuks viis.
model.comile (optimizer='adam',
kaotus ='sparse_categorical_crossentropy',
mõõdikud=['täpsus'])
model.fit (X_train, y_train, epochs=5)
Modelli treenimiseks kulub paar minutit. Pärast mudelikoolituse lõppu hinnake selle toimivust katsekomplektil.
model.evaluate (X_test, y_test)
Hindamisfunktsioon tagastab mudeli kadu ja täpsuse. Mudel annab 98% täpsust.
Mudeli kasutamine oma käsitsi kirjutatud numbrite klassifitseerimiseks
Enda käsitsi kirjutatud numbrite klassifitseerimiseks peate oma pildid ette valmistama, et need vastaksid MNIST-i andmestiku omadele. Kui te seda ei tee, ei tööta teie mudel halvasti.
Piltide eeltöötluseks tehke järgmist.
- Laadige OpenCV abil numbrit sisaldav pilt.
- Teisendage see halltooniks ja muutke selle suuruseks 28 x 28 pikslit.
- Pöörake ja normaliseerige piksliväärtusi.
- Lõpuks tasandage pilt 1D-massiiviks.
Edastage eeltöödeldud pilt prognoosimiseks mudelisse ja printige ennustatud väärtus ekraanile.
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# Tasandage pilt 1D-massiiviks
input_data = img_normalized.flatten().reshape( 1,28,28)
# Tehke mudeli abil ennustus
ennustus = mudel.prognoos (sisend_andmed)
printida (f'Ennustus: {np.argmax (ennustus)}')
Numbrit sisaldava eeltöödeldud pildi edastamine mudelile.
Mudeli väljund on järgmine:
Mudel suutis numbri seitsme õigesti klassifitseerida.
Närvivõrgud vestlusrobotites
Neuraalvõrkude kasutamine on viimastel aastatel plahvatuslikult kasvanud. Neid on valdavalt kasutatud loomuliku keele töötlemisel keele tõlkimiseks ja generatiivseks AI-ks.
Viimasel ajal on suurenenud vestlusrobotite arv, mis suudavad suhelda inimlikul viisil. Nad kasutavad teatud tüüpi närvivõrku, mida nimetatakse trafo närvivõrguks. Suhelge mõnega neist ja kogege närvivõrkude jõudu.