Umjetna inteligencija (AI) je stekla značajnu popularnost posljednjih godina.
Ako ste softverski inženjer, računarski naučnik ili uopšte entuzijasta nauke o podacima, onda ste verovatno zaintrigirani nevjerovatnim aplikacijama obrade slika, prepoznavanja uzoraka i detekcije objekata koje pruža ova oblast.
Najvažnije podpolje AI za koje ste verovatno čuli je duboko učenje. Ovo polje se fokusira na moćne algoritme (instrukcije kompjuterskog programa) modelirane po funkciji ljudskog mozga poznatom kao Neuronske mreže.
U ovom članku ćemo proći preko koncepta neuronskih mreža i kako izgraditi, kompajlirati, prilagoditi i procijeniti ove modele koristeći piton.
Neuronske mreže
Neuralne mreže ili NN su niz algoritama modeliranih prema biološkoj aktivnosti ljudskog mozga. Neuralne mreže se sastoje od čvorova, koji se nazivaju i neuroni.
Kolekcija vertikalnih čvorova poznata je kao slojevi. Model se sastoji od jednog ulaza, jednog izlaza i više skrivenih slojeva. Svaki sloj se sastoji od čvorova, koji se nazivaju i neuroni, gdje se odvijaju proračuni.
U sljedećem dijagramu, krugovi predstavljaju čvorove, a vertikalna kolekcija čvorova predstavlja slojeve. U ovom modelu postoje tri sloja.
Čvorovi jednog sloja povezani su sa sljedećim slojem putem dalekovoda kao što se vidi ispod.
Naš skup podataka sastoji se od označenih podataka. To znači da je svakom entitetu podataka dodijeljena određena vrijednost imena.
Dakle, za skup podataka o klasifikaciji životinja imat ćemo slike mačaka i pasa kao naše podatke, sa 'mačkom' i 'pasom' kao našim oznakama.
Važno je napomenuti da se oznake moraju pretvoriti u numeričke vrijednosti kako bi naš model imao smisla, tako da naše oznake životinja postaju '0' za mačku i '1' za psa. I podaci i oznake se prenose kroz model.
učenje
Podaci se unose u model jedan po jedan entitet. Ovi podaci su raščlanjeni na dijelove i proslijeđeni kroz svaki čvor modela. Čvorovi izvode matematičke operacije na ovim komadima.
Ne morate znati matematičke funkcije ili proračune za ovaj vodič, ali je važno imati opću ideju o tome kako ovi modeli rade. Nakon serije proračuna u jednom sloju, podaci se prenose na sljedeći sloj i tako dalje.
Kada se završi, naš model predviđa oznaku podataka na izlaznom sloju (na primjer, u problemu klasifikacije životinja dobijamo predviđanje '0' za mačku).
Model zatim nastavlja da poredi ovu predviđenu vrednost sa onom stvarne vrednosti oznake.
Ako se vrijednosti poklapaju, naš model će uzeti sljedeći ulaz, ali ako se vrijednosti razlikuju model će izračunati razliku između obje vrijednosti, što se naziva gubitkom, i prilagoditi proračune čvorova kako bi sljedeći put proizveo odgovarajuće oznake.
Okviri dubokog učenja
Da bismo izgradili neuronske mreže u kodu, moramo ih uvesti Okviri dubokog učenja poznate kao biblioteke koje koriste naše Integrisano razvojno okruženje (IDE).
Ovi okviri su zbirka unaprijed napisanih funkcija koje će nam pomoći u ovom vodiču. Koristit ćemo Keras framework za izgradnju našeg modela.
Keras je Python biblioteka koja koristi pozadinu dubokog učenja i umjetne inteligencije tzv. tenzorski tok za kreiranje NN-ova u obliku jednostavnih sekvencijalnih modela sa lakoćom.
Keras također dolazi sa svojim već postojećim modelima koji se također mogu koristiti. Za ovaj tutorijal kreirat ćemo vlastiti model koristeći Keras.
Više o ovom okviru za duboko učenje možete saznati na Keras web stranica.
Izgradnja neuronske mreže (Tutorial)
Pređimo na izgradnju neuronske mreže koristeći Python.
Izjava o problemu
Neuralne mreže su vrsta rješenja za probleme zasnovane na umjetnoj inteligenciji. Za ovaj vodič ćemo pregledati podatke o dijabetesu Indijanaca Pima, koji su dostupni OVDJE.
ICU Machine Learning je sastavio ovaj skup podataka i sadrži medicinski karton indijskih pacijenata. Naš model mora predvidjeti da li pacijent ima početak dijabetesa u roku od 5 godina ili ne.
Učitavanje skupa podataka
Naš skup podataka je jedna CSV datoteka pod nazivom 'diabetes.csv' kojom se lako može manipulirati pomoću Microsoft Excel-a.
Prije kreiranja našeg modela, moramo uvesti naš skup podataka. Koristeći sljedeći kod možete to učiniti:
uvezi pande kao pd
podaci = pd.read_csv('diabetes.csv')
x = data.drop(“Ishod”)
y = podaci[“Ishod”]
Ovdje koristimo Pandas da bi mogli da manipulišemo našim podacima iz CSV datoteke, read_csv() je ugrađena funkcija Pande koja nam omogućava da pohranimo vrednosti u našoj datoteci u varijablu koja se zove 'podaci'.
Varijabla x sadrži naš skup podataka bez podataka o ishodu (oznaka). To postižemo funkcijom data.drop() koja uklanja oznake za x, dok y sadrži samo podatke o ishodu (oznaku).
Izgradnja sekvencijalnog modela
Korak 1: Uvoz biblioteka
Prvo, moramo uvesti TensorFlow i Keras, zajedno sa određenim parametrima potrebnim za naš model. Sljedeći kod nam omogućava da to uradimo:
import tensorflow kao tf
iz tensorflow import keras
iz tensorflow.keras.models import Sequential
iz tensorflow.keras.layers import Aktivacija, gusto
iz tensorflow.keras.optimizers import Adam
iz tensorflow.keras.metrics import categorical_crossentropy
Za naš model uvozimo guste slojeve. Ovo su potpuno povezani slojevi; tj. svaki čvor u sloju je u potpunosti povezan sa drugim čvorom u sljedećem sloju.
Takođe uvozimo i aktiviranje funkcija potrebna za skaliranje podataka koji se šalju čvorovima. Optimizatori su također uvezeni kako bi se minimizirali gubici.
Adam je poznati optimizator koji čini proračune čvorova ažuriranja našeg modela efikasnijim, zajedno sa categorical_crossentropy koja je tip funkcije gubitka (izračunava razliku između stvarnih i predviđenih vrijednosti oznake) koju ćemo koristiti.
Korak 2: Dizajniranje našeg modela
Model koji kreiram ima jedan ulazni (sa 16 jedinica), jedan skriveni (sa 32 jedinice) i jedan izlazni (sa 2 jedinice) sloj. Ovi brojevi nisu fiksni i u potpunosti će ovisiti o datom problemu.
Postavljanje pravog broja jedinica i slojeva je proces koji se može poboljšati prekovremeno kroz praksu. Aktivacija odgovara vrsti skaliranja koje ćemo izvršiti na našim podacima prije nego što ih prođemo kroz čvor.
Relu i Softmax su poznate funkcije aktivacije za ovaj zadatak.
model = Sekvencijalni([
Gusto(jedinice = 16, input_shape = (1,), aktivacija = 'relu'),
Gusto (jedinice = 32, aktivacija = 'relu'),
Gusto (jedinice = 2, aktivacija = 'softmax')
])
Evo kako bi sažetak modela trebao izgledati:
Obuka modela
Naš model će se obučavati u dva koraka, prvi će biti kompajliranje modela (sastavljanje modela) a sljedeći je prilagođavanje modela na datom skupu podataka.
Ovo se može učiniti pomoću funkcije model.compile() nakon čega slijedi funkcija model.fit().
model.compile(optimizer = Adam(learning_rate = 0.0001), gubitak = 'binary_crossentropy', metrics = ['accuracy'])
model.fit(x, y, epohe = 30, batch_size = 10)
Određivanje metrike 'tačnosti' omogućava nam da posmatramo tačnost našeg modela tokom treninga.
Budući da su naše oznake u obliku 1 i 0, koristit ćemo binarnu funkciju gubitka da bismo izračunali razliku između stvarnih i predviđenih oznaka.
Skup podataka se također dijeli na grupe od 10 (batch_size) i proći će kroz model 30 puta (epohe). Za dati skup podataka, x bi bio podatak, a y bi bile oznake koje odgovaraju podacima.
Testiranje modela pomoću predviđanja
Da bismo procijenili naš model, pravimo predviđanja na testnim podacima pomoću funkcije predict().
predviđanja = model.predict(x)
I to je to!
Sada biste trebali dobro razumjeti Deep Learning aplikacija, Neuralne mreže, kako funkcioniraju općenito i kako izgraditi, obučiti i testirati model u Python kodu.
Nadam se da će vam ovaj tutorijal dati poticaj za kreiranje i implementaciju vlastitih modela dubokog učenja.
Javite nam u komentarima je li članak bio od pomoći.
Ostavite odgovor