Umetna inteligenca (AI) je v zadnjih letih pridobila veliko popularnost.
Če ste programski inženir, računalničar ali na splošno navdušenec nad podatkovnimi znanostmi, potem vas verjetno zanimajo neverjetne aplikacije obdelave slik, prepoznavanja vzorcev in zaznavanja predmetov, ki jih ponuja to področje.
Najpomembnejše podpolje AI, za katerega ste verjetno slišali, je globoko učenje. To področje se osredotoča na zmogljive algoritme (navodila računalniških programov), oblikovane po človeških možganskih funkcijah, znanih kot Nevronske mreže.
V tem članku bomo obravnavali koncept nevronskih omrežij in kako zgraditi, prevesti, prilagoditi in oceniti te modele z uporabo Python.
Nevronske mreže
Nevronske mreže ali NN so niz algoritmov, oblikovanih po biološki aktivnosti človeških možganov. Nevronske mreže so sestavljene iz vozlišč, imenovanih tudi nevroni.
Zbirka navpičnih vozlišč je znana kot plasti. Model je sestavljen iz enega vhoda, enega izhoda in več skritih plasti. Vsaka plast je sestavljena iz vozlišč, imenovanih tudi nevroni, kjer potekajo izračuni.
V naslednjem diagramu krogi predstavljajo vozlišča, navpična zbirka vozlišč pa plasti. V tem modelu so tri plasti.
Vozlišča ene plasti so povezana z naslednjo plastjo preko prenosnih vodov, kot je prikazano spodaj.
Naš nabor podatkov je sestavljen iz označenih podatkov. To pomeni, da je bila vsaki podatkovni entiteti dodeljena določena vrednost imena.
Torej bomo za nabor podatkov o klasifikaciji živali imeli slike mačk in psov kot naše podatke, z oznako »mačka« in »pes«.
Pomembno je omeniti, da je treba oznake pretvoriti v številčne vrednosti, da jih naš model razloži, tako da naše oznake živali postanejo '0' za mačko in '1' za psa. Tako podatki kot oznake se prenašajo skozi model.
Izobraževanje
Podatki se dajejo modelu ena entiteta naenkrat. Ti podatki so razčlenjeni na koščke in posredovani skozi vsako vozlišče modela. Vozlišča izvajajo matematične operacije na teh delih.
Za to vadnico vam ni treba poznati matematičnih funkcij ali izračunov, vendar je pomembno, da imate splošno predstavo o tem, kako ti modeli delujejo. Po seriji izračunov v enem sloju se podatki prenesejo na naslednjo plast in tako naprej.
Ko je končan, naš model napove oznako podatkov na izhodni plasti (na primer, v problemu klasifikacije živali dobimo napoved '0' za mačko).
Model nato nadaljuje s primerjavo te predvidene vrednosti z dejansko vrednostjo oznake.
Če se vrednosti ujemajo, bo naš model prevzel naslednji vhod, če pa se vrednosti razlikujejo, bo model izračunal razliko med obema vrednostma, imenovano izguba, in prilagodil izračune vozlišč, da bo naslednjič ustvaril ujemajoče se oznake.
Okvirji za globoko učenje
Za gradnjo nevronskih omrežij v kodi moramo uvoziti Okvirji globokega učenja znane kot knjižnice, ki uporabljajo naše integrirano razvojno okolje (IDE).
Ti okvirji so zbirka vnaprej napisanih funkcij, ki nam bodo v pomoč pri tej vadnici. Za izdelavo našega modela bomo uporabili okvir Keras.
Keras je knjižnica Python, ki uporablja ozadje globokega učenja in umetne inteligence, imenovano Tenzorski tok z lahkoto ustvariti NN v obliki preprostih zaporednih modelov.
Keras ima tudi svoje že obstoječe modele, ki bi jih lahko uporabili tudi. Za to vadnico bomo s Kerasom ustvarili svoj model.
Več o tem okviru globokega učenja lahko izveste na Spletno mesto Keras.
Izgradnja nevronske mreže (vadnica)
Pojdimo na gradnjo nevronske mreže s Pythonom.
Izjava o težavi
Nevronske mreže so vrsta rešitve za težave, ki temeljijo na umetni inteligenci. V tej vadnici bomo pregledali podatke o sladkorni bolezni Indijancev Pima, ki so na voljo tukaj.
ICU Strojno učenje je zbralo ta nabor podatkov in vsebuje zdravstveno kartoteko indijskih bolnikov. Naš model mora predvideti, ali ima bolnik začetek sladkorne bolezni v 5 letih ali ne.
Nalaganje nabora podatkov
Naš nabor podatkov je ena sama datoteka CSV, imenovana 'diabetes.csv', ki jo je mogoče enostavno manipulirati z uporabo Microsoft Excela.
Preden ustvarimo naš model, moramo uvoziti naš nabor podatkov. Z uporabo naslednje kode lahko to storite:
uvozite pande kot pd
podatki = pd.read_csv('diabetes.csv')
x = data.drop(»izid«)
y = podatki [»izid«]
Tukaj uporabljamo pand read_csv() je vgrajena funkcija Pande, ki nam omogoča shranjevanje vrednosti v naši datoteki v spremenljivko, imenovano 'data'.
Spremenljivka x vsebuje naš nabor podatkov brez podatkov o rezultatih (oznake). To dosežemo s funkcijo data.drop(), ki odstrani oznake za x, medtem ko y vsebuje samo podatke o rezultatu (oznaki).
Gradnja zaporednega modela
1. korak: uvoz knjižnic
Najprej moramo uvoziti TensorFlow in Keras, skupaj z nekaterimi parametri, potrebnimi za naš model. To nam omogoča naslednja koda:
uvoz tenzorskega toka kot tf
iz uvoza tensorflow keras
iz tensorflow.keras.models import Sequential
iz tensorflow.keras.layers uvoz Aktivacija, gosto
iz tensorflow.keras.optimizers uvozi Adam
iz tensorflow.keras.metrics uvoz categorical_crossentropy
Za naš model uvažamo goste plasti. To so popolnoma povezane plasti; to pomeni, da je vsako vozlišče v sloju v celoti povezano z drugim vozliščem v naslednjem sloju.
Uvažamo tudi Aktivacija funkcija, potrebna za skaliranje podatkov, poslanih vozliščem. Optimizatorji so bili tudi uvoženi, da bi zmanjšali izgubo.
Adam je znan optimizator, ki omogoča učinkovitejše izračune vozlišč za posodobitev modela, skupaj z categorical_crossentropy, ki je vrsto funkcije izgube (izračuna razliko med dejansko in predvideno vrednostjo oznake), ki jo bomo uporabili.
2. korak: Oblikovanje našega modela
Model, ki ga ustvarjam, ima eno vhodno (s 16 enotami), eno skrito (z 32 enotami) in eno izhodno (z 2 enotama) plast. Te številke niso fiksne in bodo v celoti odvisne od dane težave.
Nastavitev pravega števila enot in slojev je proces, ki ga je mogoče nadurno izboljšati s prakso. Aktivacija ustreza vrsti skaliranja, ki ga bomo izvajali na naših podatkih, preden jih bomo posredovali skozi vozlišče.
Relu in Softmax sta znani aktivacijski funkciji za to nalogo.
model = zaporedno([
Gosto (enote = 16, oblika_vhoda = (1,), aktivacija = 'relu'),
Gosto (enot = 32, aktivacija = 'relu'),
Gosto (enote = 2, aktivacija = 'softmax')
])
Takole naj bi izgledal povzetek modela:
Izobraževanje modela
Naš model se bo usposobil v dveh korakih, pri čemer bo prvi sestavljanje modela (sestavljanje modela) in naslednji prilagajanje modela na danem nizu podatkov.
To lahko storite s funkcijo model.compile(), ki ji sledi funkcija model.fit().
model.compile(optimizer = Adam(stopnja_učenja = 0.0001), izguba = 'binary_crossentropy', metrics = ['accuracy'])
model.fit(x, y, epohe = 30, velikost_serije = 10)
Določanje metrike "natančnost" nam omogoča opazovanje natančnosti našega modela med treningom.
Ker so naše oznake v obliki 1 in 0, bomo za izračun razlike med dejanskimi in predvidenimi oznakami uporabili binarno funkcijo izgube.
Podatkovni nabor je prav tako razdeljen na serije po 10 (batch_size) in bo skozi model prenesen 30-krat (epohe). Za dani nabor podatkov bi bili x podatki in y bi bile oznake, ki ustrezajo podatkom.
Testiranje modela z uporabo napovedi
Za oceno našega modela naredimo napovedi na testnih podatkih s funkcijo predict().
napovedi = model.predict(x)
In to je to!
Zdaj bi morali dobro razumeti Globoko učenje aplikacijo, nevronske mreže, kako delujejo na splošno in kako zgraditi, usposobiti in preizkusiti model v kodi Python.
Upam, da vam bo ta vadnica omogočila ustvarjanje in uvajanje lastnih modelov globokega učenja.
Sporočite nam v komentarjih, če je bil članek koristen.
Pustite Odgovori