Turinys[Slėpti][Rodyti]
Pastaraisiais metais neuroninių tinklų populiarumas išaugo, nes pasirodė, kad jie itin gerai atlieka įvairias užduotis.
Įrodyta, kad jie yra puikus pasirinkimas norint atpažinti vaizdą ir garsą, apdoroti natūralią kalbą ir netgi žaisti sudėtingus žaidimus, tokius kaip „Go“ ir „šachmatai“.
Šiame įraše paaiškinsiu visą neuroninio tinklo mokymo procesą. Paminėsiu ir paaiškinsiu visus neuroninio tinklo mokymo veiksmus.
Nors apžvelgsiu veiksmus, norėčiau pridėti paprastą pavyzdį, kad įsitikintumėte, jog yra ir praktinis pavyzdys.
Taigi, ateikite ir išmokime apdoroti neuroninius tinklus
Pradėkime nuo paprasto ir paklauskime, kas yra neuroniniai tinklai pirmoje vietoje.
Kas tiksliai yra neuroniniai tinklai?
Neuroniniai tinklai yra kompiuterių programinė įranga, imituojanti žmogaus smegenų veiklą. Jie gali mokytis iš daugybės duomenų ir pastebėti modelius, kuriuos žmonėms gali būti sunku aptikti.
Neuroninių tinklų populiarumas pastaraisiais metais išaugo dėl jų universalumo atliekant tokias užduotis kaip vaizdo ir garso atpažinimas, natūralios kalbos apdorojimas ir nuspėjamasis modeliavimas.
Apskritai, neuroniniai tinklai yra stiprus įrankis įvairioms programoms ir turi galimybę pakeisti požiūrį į įvairius darbus.
Kodėl turėtume apie juos žinoti?
Neuroninių tinklų supratimas yra labai svarbus, nes jie paskatino atradimus įvairiose srityse, įskaitant kompiuterinį regėjimą, kalbos atpažinimą ir natūralios kalbos apdorojimą.
Pavyzdžiui, neuroniniai tinklai yra naujausių savarankiškai vairuojančių automobilių, automatinio vertimo paslaugų ir net medicininės diagnostikos pokyčių pagrindas.
Supratimas, kaip veikia neuroniniai tinklai ir kaip juos kurti, padeda kurti naujas ir išradingas programas. Ir galbūt ateityje tai gali paskatinti dar didesnius atradimus.
Pastaba apie mokymo programą
Kaip sakiau aukščiau, pateikdamas pavyzdį norėčiau paaiškinti neuroninio tinklo mokymo veiksmus. Norėdami tai padaryti, turėtume kalbėti apie MNIST duomenų rinkinį. Tai populiarus pasirinkimas pradedantiesiems, norintiems pradėti dirbti su neuroniniais tinklais.
MNIST yra akronimas, reiškiantis Modifikuotą nacionalinį standartų ir technologijų institutą. Tai ranka įrašytas skaitmenų duomenų rinkinys, dažniausiai naudojamas mašininio mokymosi modeliams, ypač neuroniniams tinklams, mokymui ir testavimui.
Kolekcijoje yra 70,000 0 pilkų atspalvių nuotraukų su ranka rašytų skaitmenų nuo 9 iki XNUMX.
MNIST duomenų rinkinys yra populiarus etalonas vaizdo klasifikacija užduotys. Jis dažnai naudojamas mokymui ir mokymuisi, nes yra kompaktiškas ir lengvai valdomas, o mašininio mokymosi algoritmams sudėtingas iššūkis.
MNIST duomenų rinkinį palaiko kelios mašininio mokymosi sistemos ir bibliotekos, įskaitant TensorFlow, Keras ir PyTorch.
Dabar mes žinome apie MNIST duomenų rinkinį, pradėkime nuo neuroninio tinklo mokymo veiksmų.
Pagrindiniai neuroninio tinklo lavinimo žingsniai
Importuokite būtinas bibliotekas
Pirmą kartą pradedant mokyti neuroninį tinklą, labai svarbu turėti reikiamus įrankius modeliui kurti ir mokyti. Pradinis žingsnis kuriant neuroninį tinklą yra importuoti reikiamas bibliotekas, tokias kaip TensorFlow, Keras ir NumPy.
Šios bibliotekos yra neuroninio tinklo plėtros blokai ir suteikia esminių galimybių. Šių bibliotekų derinys leidžia sukurti sudėtingus neuroninių tinklų dizainus ir greitai apmokyti.
Norėdami pradėti mūsų pavyzdį; importuosime reikiamas bibliotekas, įskaitant TensorFlow, Keras ir NumPy. TensorFlow yra atvirojo kodo mašininio mokymosi sistema, „Keras“ yra aukšto lygio neuroninio tinklo API, o „NumPy“ yra skaitmeninio skaičiavimo „Python“ biblioteka.
import tensorflow as tf
from tensorflow import keras
import numpy as np
Įkelkite duomenų rinkinį
Dabar duomenų rinkinys turi būti įkeltas. Duomenų rinkinys yra duomenų, kuriais remiantis bus apmokytas neuroninis tinklas, rinkinys. Tai gali būti bet kokio tipo duomenys, įskaitant nuotraukas, garsą ir tekstą.
Labai svarbu padalyti duomenų rinkinį į dvi dalis: vieną, skirtą neuroniniam tinklui lavinti, o kitą - mokomo modelio teisingumui įvertinti. Duomenų rinkiniui importuoti gali būti naudojamos kelios bibliotekos, įskaitant TensorFlow, Keras ir PyTorch.
Pavyzdžiui, MNIST duomenų rinkiniui įkelti taip pat naudojame Keras. Duomenų rinkinyje yra 60,000 10,000 mokymo nuotraukų ir XNUMX XNUMX bandomųjų vaizdų.
mnist = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
Išankstinis duomenų apdorojimas
Išankstinis duomenų apdorojimas yra svarbus neuroninio tinklo mokymo etapas. Tai apima duomenų paruošimą ir valymą prieš įvedant juos į neuroninį tinklą.
Išankstinio apdorojimo procedūrų pavyzdžiai yra pikselių verčių mastelio keitimas, duomenų normalizavimas ir etikečių konvertavimas į vienkartinę kodavimą. Šie procesai padeda neuroniniam tinklui mokytis efektyviau ir tiksliau.
Išankstinis duomenų apdorojimas taip pat gali padėti sumažinti perteklinį pritaikymą ir pagerinti neuroninio tinklo našumą.
Prieš mokydami neuroninį tinklą, turite iš anksto apdoroti duomenis. Tai apima etikečių keitimą į vienkartinę kodavimą ir pikselių reikšmių mastelį nuo 0 iki 1.
train_images = train_images / 255.0
test_images = test_images / 255.0
train_labels = keras.utils.to_categorical(train_labels, 10)
test_labels = keras.utils.to_categorical(test_labels, 10)
Apibrėžkite modelį
Neuroninio tinklo modelio apibrėžimo procesas apima jo architektūros nustatymą, pvz., sluoksnių skaičių, neuronų skaičių viename sluoksnyje, aktyvinimo funkcijas ir tinklo tipą (grįžtamasis, pasikartojantis arba konvoliucinis).
Jūsų naudojamas neuroninio tinklo dizainas priklauso nuo problemos, kurią bandote išspręsti. Gerai apibrėžtas neuroninio tinklo dizainas gali padėti mokytis neuroninio tinklo, nes jis tampa veiksmingesnis ir tikslesnis.
Šiuo metu laikas aprašyti neuroninio tinklo modelį. Šiame pavyzdyje naudokite paprastą modelį su dviem paslėptais sluoksniais, kurių kiekviename yra 128 neuronai, ir softmax išvesties sluoksnį, kuriame yra 10 neuronų.
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
Sudarykite modelį
Kuriant neuroninio tinklo modelį, turi būti nurodyta nuostolių funkcija, optimizatorius ir metrika. Neuroninio tinklo gebėjimas teisingai prognozuoti išvestį įvertinamas praradimo funkcija.
Kad padidintų neuroninio tinklo tikslumą treniruočių metu, optimizatorius modifikuoja jo svorius. Neuroninio tinklo efektyvumas treniruočių metu vertinamas naudojant metrikas. Modelis turi būti sukurtas prieš pradedant mokyti neuroninį tinklą.
Mūsų pavyzdyje dabar turime sukurti modelį.
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
Treniruok modelį
Paruošto duomenų rinkinio perdavimas per neuroninį tinklą modifikuojant tinklo svorį, kad būtų sumažinta praradimo funkcija, vadinamas neuroninio tinklo mokymu.
Patvirtinimo duomenų rinkinys naudojamas neuroniniam tinklui išbandyti treniruočių metu, kad būtų galima stebėti jo efektyvumą ir išvengti per didelio pritaikymo. Mokymo procesas gali užtrukti, todėl svarbu įsitikinti, kad neuroninis tinklas yra tinkamai apmokytas, kad būtų išvengta netinkamo pritaikymo.
Naudodami mokymo duomenis dabar galime išmokyti modelį. Norėdami tai padaryti, turime apibrėžti partijos dydį (mėginių, apdorotų prieš atnaujinant modelį, skaičių) ir epochų skaičių (pakartojimų visame duomenų rinkinyje skaičių).
model.fit(train_images, train_labels, epochs=10, batch_size=32)
Modelio įvertinimas
Neuroninio tinklo našumo tikrinimas bandomajame duomenų rinkinyje yra jo įvertinimo procesas. Šiame etape apmokytas neuroninis tinklas naudojamas bandymo duomenų rinkiniui apdoroti ir įvertinamas tikslumas.
Tai, kaip efektyviai neuroninis tinklas gali prognozuoti teisingą rezultatą iš visiškai naujų, neišbandytų duomenų, yra jo tikslumo matas. Modelio analizė gali padėti nustatyti, kaip gerai veikia neuroninis tinklas, taip pat pasiūlyti būdų, kaip jį dar geriau padaryti.
Pagaliau galime įvertinti modelio veikimą naudodami testo duomenis po treniruotės.
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
Tai viskas! Mes išmokėme neuroninį tinklą aptikti skaitmenis MNIST duomenų rinkinyje.
Nuo duomenų paruošimo iki apmokyto modelio efektyvumo įvertinimo, neuroninio tinklo mokymas apima kelis procesus. Šios instrukcijos padeda naujokams efektyviai kurti ir mokyti neuroninius tinklus.
Pradedantieji, norintys naudoti neuroninius tinklus įvairioms problemoms spręsti, gali tai padaryti vadovaudamiesi šiomis instrukcijomis.
Pavyzdžio vizualizavimas
Pabandykime įsivaizduoti, ką padarėme naudodami šį pavyzdį, kad geriau suprastume.
Šiame kodo fragmente naudojamas „Matplotlib“ paketas, norint nubraižyti atsitiktinai pasirinktas nuotraukas iš mokymo duomenų rinkinio. Pirmiausia importuojame „Matplotlib“ „pyplot“ modulį ir pavadiname jį kaip „plt“. Tada, kai bendras matmuo yra 10 x 10 colių, sudarome figūrą su 5 eilutėmis ir 5 stulpeliais.
Tada mes naudojame for kilpą, kad galėtume kartoti antrinius brėžinius, kiekviename iš jų rodydami paveikslėlį iš mokymo duomenų rinkinio. Norint rodyti paveikslėlį, naudojama „imshow“ funkcija, o parinktis „cmap“ nustatyta į „pilka“, kad nuotraukos būtų rodomos pilkos spalvos tonais. Kiekvienos dalies pavadinimas taip pat nustatomas pagal susieto vaizdo etiketę kolekcijoje.
Galiausiai, norėdami parodyti paveikslėlyje nubrėžtas nuotraukas, naudojame funkciją „rodyti“. Ši funkcija leidžia mums vizualiai įvertinti nuotraukų pavyzdį iš duomenų rinkinio, o tai gali padėti mums suprasti duomenis ir nustatyti galimas problemas.
import matplotlib.pyplot as plt
# Plot a random sample of images
fig, axes = plt.subplots(nrows=5, ncols=5, figsize=(10,10))
for i, ax in enumerate(axes.flat):
ax.imshow(train_images[i], cmap='gray')
ax.set_title(f"Label: {train_labels[i].argmax()}")
ax.axis('off')
plt.show()
Svarbūs neuroninių tinklų modeliai
- Neuroniniai tinklai (FFNN): Paprastas neuroninio tinklo tipas, kuriame informacija keliauja tik vienu būdu, iš įvesties sluoksnio į išvesties sluoksnį per vieną ar kelis paslėptus sluoksnius.
- Konvoliuciniai neuroniniai tinklai (CNN): Neuroninis tinklas, dažniausiai naudojamas vaizdų aptikimui ir apdorojimui. CNN yra skirti automatiškai atpažinti ir išskirti iš nuotraukų funkcijas.
- Pasikartojantys neuroniniai tinklai (RNN): Neuroninis tinklas, dažniausiai naudojamas vaizdų aptikimui ir apdorojimui. CNN yra skirti automatiškai atpažinti ir išskirti iš nuotraukų funkcijas.
- Ilgalaikės trumpalaikės atminties (LSTM) tinklai: RNN forma, sukurta siekiant išspręsti standartinių RNN gradientų išnykimo problemą. Ilgalaikes nuoseklių duomenų priklausomybes galima geriau užfiksuoti naudojant LSTM.
- Automatiniai kodavimo įrenginiai: Neprižiūrimas mokymosi neuroninis tinklas, kuriame tinklas mokomas atkurti įvesties duomenis išvesties lygmenyje. Duomenų suspaudimas, anomalijų aptikimas ir vaizdo triukšmo mažinimas gali būti atliekami naudojant automatinius kodavimo įrenginius.
- Generative Adversarial Networks (GAN): Generacinis neuroninis tinklas yra neuroninio tinklo forma, kuri mokoma gaminti naujus duomenis, panašius į mokymo duomenų rinkinį. GAN sudaro du tinklai: generatorių tinklas, sukuriantis naujus duomenis, ir diskriminacinis tinklas, įvertinantis sukurtų duomenų kokybę.
Apibendrinant, kokie turėtų būti tolesni jūsų žingsniai?
Naršykite kelis internetinius išteklius ir kursus, kad sužinotumėte daugiau apie neuroninio tinklo mokymą. Darbas su projektais ar pavyzdžiais yra vienas iš būdų geriau suprasti neuroninius tinklus.
Pradėkite nuo paprastų pavyzdžių, pvz., dvejetainio klasifikavimo problemų ar paveikslėlių klasifikavimo užduočių, o tada pereikite prie sudėtingesnių užduočių, pvz., natūralios kalbos apdorojimo arba stiprinimas.
Darbas su projektais padeda įgyti realios patirties ir tobulinti neuroninio tinklo mokymo įgūdžius.
Taip pat galite prisijungti prie internetinių mašininio mokymosi ir neuroninių tinklų grupių bei forumų, kad galėtumėte bendrauti su kitais besimokančiaisiais ir specialistais, dalytis savo darbais ir gauti komentarų bei pagalbos.
LSRS MONRAD-KROHN
⁶ĵNorėčiau pamatyti python programą, skirtą klaidų mažinimui. Specialūs pasirinkimo mazgai svorio keitimui į kitą sluoksnį