Što je Keras? Objasnio je API duboke neuronske mreže

Iako su duboke neuronske mreže u bijesu, složenost glavnih okvira bila je prepreka njihovoj uporabi za programere koji su novi u strojnom učenju. Bilo je nekoliko prijedloga za poboljšane i pojednostavljene API-je na visokoj razini za izgradnju modela neuronskih mreža, koji svi izgledaju slično iz daljine, ali pokazuju razlike prilikom bližeg ispitivanja.

Keras je jedan od vodećih API-ja neuronske mreže na visokoj razini. Napisan je na Pythonu i podržava više mehanizama za računanje pozadinske neuronske mreže.

Keras i TensorFlow

S obzirom da je TensorFlow projekt je usvojila Keras kao API na visokoj razini za predstojeće TensorFlow 2,0 release, Keras izgleda da se pobjednik, ako ne i nužno pobjednik. U ovom ćemo članku istražiti principe i provedbu Kerasa, s ciljem razumijevanja zašto je to poboljšanje u odnosu na API-je dubokog učenja na niskoj razini.

Čak i u TensorFlowu 1.12, službeni vodič za početnike s TensorFlowom koristi Keras API visoke razine ugrađen u TensorFlow, tf.keras . Suprotno tome, TensorFlow Core API zahtijeva rad s TensorFlow računalnim grafikonima, tenzorima, operacijama i sesijama, od kojih neke može biti teško razumjeti kada tek započinjete s radom s TensorFlowom. Postoje neke prednosti korištenja API-ja TensorFlow Core niske razine, uglavnom prilikom uklanjanja pogrešaka, ali po sreći možete kombinirati API-je TensorFlow visoke razine i po potrebi.

Keras principi

Keras je stvoren da bude lagan za upotrebu, modularan, jednostavan za proširenje i za rad s Pythonom. API je "dizajniran za ljude, a ne za strojeve" i "slijedi najbolje prakse za smanjenje kognitivnog opterećenja".

Neuronski slojevi, troškovne funkcije, optimizatori, sheme inicijalizacije, aktivacijske funkcije i sheme regularizacije sve su samostalni moduli koje možete kombinirati za stvaranje novih modela. Nove module je jednostavno dodati, kao nove klase i funkcije. Modeli su definirani u Python kodu, a ne odvojene datoteke konfiguracije modela.

Zašto Keras?

Najveći razlozi za upotrebu Kerasa proizlaze iz njegovih vodećih načela, prvenstveno onog o tome da je korisnik prilagođen. Osim jednostavnosti učenja i jednostavnosti izrade modela, Keras nudi i prednosti širokog usvajanja, podršku širokom spektru mogućnosti implementacije proizvodnje, integraciju s najmanje pet pozadinskih motora (TensorFlow, CNTK, Theano, MXNet i PlaidML), i snažnu podršku za više grafičkih procesora i distribuirani trening. Uz to, Kerasa podržavaju Google, Microsoft, Amazon, Apple, Nvidia, Uber i drugi.

Keras natrag završava

Tvrtka Keras vlastito ne obavlja vlastite operacije na niskoj razini, poput tenzorskih proizvoda i konvolucija; za to se oslanja na stražnji motor. Iako Keras podržava više pozadinskih motora, njegov primarni (i zadani) pozadinski kraj je TensorFlow, a primarni podržatelj je Google. Keras API dolazi pakiran u TensorFlow as tf.keras, koji će, kao što je ranije spomenuto, od TensorFlow 2.0 postati primarni TensorFlow API.

Da biste promijenili pozadine, jednostavno uredite $HOME/.keras/keras.jsondatoteku i navedite drugo pozadinsko ime, poput theanoili CNTK. Alternativno, možete nadjačati konfigurirani stražnji kraj definiranjem varijable okoline KERAS_BACKENDbilo u ljusci ili u Python kodu pomoću os.environ["KERAS_BACKEND"]svojstva.

Keras modeli

Model je jezgra Keras struktura podataka. U Kerasu su dostupne dvije glavne vrste modela: Sequentialmodel i Modelklasa koja se koristi s funkcionalnim API-jem.

Keras sekvencijalni modeli

SequentialModel je linearna stog slojeva, a slojevi se može opisati vrlo jednostavno. Evo primjera iz Kerasove dokumentacije koji koristi model.add()za definiranje dva gusta sloja u Sequentialmodelu:

uvoz kerasa

iz keras.models import Sequential

iz kerasa.slojevi uvoze Gusti

# Stvorite sekvencijalni model s gustim slojevima, koristeći metodu dodavanja

#Dense provodi operaciju:

# izlaz = aktivacija (točka (ulaz, jezgra) + pristranost)

#Jedinice su dimenzionalnost izlaznog prostora za sloj,

# što je jednako broju skrivenih jedinica

# Funkcije aktiviranja i gubitka mogu se odrediti nizovima ili klasama

model.add (Gusto (jedinice = 10, aktivacija = "softmax"))

# Metoda sastavljanja konfigurira proces učenja modela

              optimizer = "sgd",

              metrika = ['točnost'])

# Fit metoda obavlja trening u serijama

# x_train i y_train su Numpyjevi nizovi - baš kao u Scikit-Learn API-ju.

# Metoda procjene izračunava gubitke i mjerne podatke

# za obučeni model

# Metoda predviđanja primjenjuje obučeni model na ulaze

# za generiranje rezultata

klase = model.predict (x_test, batch_size = 128)

Vrijedno je pročitati komentare u gornjem kodu. Također je vrijedno napomenuti koliko je malo praznine u stvarnom kodu u usporedbi s, recimo, API-jem TensorFlow na niskoj razini. Svaka definicija sloja zahtijeva jedan redak koda, kompilacija (definicija procesa učenja) uzima jedan red koda, a uklapanje (trening), procjena (izračunavanje gubitaka i mjernih podataka) i predviđanje rezultata iz obučenog modela uzima po jedan redak koda .

Kerasov funkcionalni API

Kerasov sekvencijalni model jednostavan je, ali ograničen u topologiji modela. Kerasov funkcionalni API koristan je za stvaranje složenih modela, kao što su modeli s više ulaza / više izlaza, usmjereni aciklični grafovi (DAG-ovi) i modeli sa zajedničkim slojevima.

Funkcionalni API koristi iste slojeve kao i sekvencijalni model, ali pruža veću fleksibilnost u njihovom sastavljanju. U funkcionalnom API-ju prvo definirate slojeve, a zatim izradite Model, sastavite ga i prilagodite (obučite). Procjena i predviđanje u osnovi su isti kao u sekvencijalnom modelu, pa su izostavljeni u donjem uzorku koda.

s keras.layers uvozi ulaz, gusto

iz keras.models model uvoza

# Ovo vraća tenzor

# instanca sloja može se pozvati na tenzoru i vraća tenzor

x = gusto (64, aktivacija = "relu") (x)

predviđanja = gusto (10, aktivacija = "softmax") (x)

# Ovo stvara model koji uključuje

# ulazni sloj i tri gusta sloja

model.compile (optimizer = 'rmsprop',

              gubitak = "categorical_crossentropy",

              metrika = ['točnost'])

model.fit (podaci, naljepnice)  # započinje trening

Keras slojevi

U prethodnim primjerima koristili smo samo Denseslojeve. Keras ima širok izbor unaprijed definiranih vrsta slojeva, a također podržava i pisanje vlastitih slojeva.

Jezgrani slojevi uključuju Dense(točkasti proizvod plus pristranost), Activation(prijenosna funkcija ili oblik neurona), Dropout(nasumično postavite djelić ulaznih jedinica na 0 pri svakom ažuriranju treninga kako biste izbjegli prekomjerno prilagođavanje), Lambda(zamotajte proizvoljan izraz kao Layerobjekt) i nekoliko drugih . Slojevi konvolucije (upotreba filtra za stvaranje mape značajki) izvode se od 1D do 3D i uključuju najčešće verzije, poput obrezivanja i transponirane slojeve konvolucije za svaku dimenziju. 2D konvolucija, nadahnuta funkcionalnošću vizualnog korteksa, obično se koristi za prepoznavanje slike.

Slojevi za udruživanje (smanjivanje skale) izvode se od 1D do 3D i uključuju najčešće inačice, poput maksimalnog i prosječnog udruživanja. Lokalno povezani slojevi djeluju poput slojeva konvolucije, osim što utezi nisu podijeljeni. Ponavljajući slojevi uključuju jednostavne (potpuno povezane recidive), gated, LSTM i druge; oni su korisni za obradu jezika, između ostalih aplikacija. Slojevi buke pomažu u izbjegavanju prekomjerne opreme.

Skupovi podataka Keras

Keras putem keras.datasetsklase isporučuje sedam uobičajenih skupova uzoraka za duboko učenje . To uključuje male slike u boji cifar10 i cifar100, kritike filmova IMDB-a, Reutersove teme vijesti, ručno napisane znamenke MNIST, modne slike MNIST i cijene stanova u Bostonu.

Keras aplikacije i primjeri

Keras također isporučuje deset poznatih modela, nazvanih Keras Applications, prethodno pripremljenih za ImageNet: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK. Pomoću njih možete predvidjeti klasifikaciju slika, iz njih izvući značajke i fino podesiti modele na različitim skupovima klasa.

Inače, fino podešavanje postojećih modela dobar je način za ubrzanje treninga. Na primjer, možete dodati slojeve po želji, zamrznuti osnovne slojeve da biste uvježbali nove slojeve, a zatim odmrznuti neke od osnovnih slojeva kako biste fino podesili trening. Sloj možete zamrznuti postavljanjem layer.trainable = False.

Spremište primjera Keras sadrži više od 40 uzoraka modela. Oni pokrivaju modele vida, tekst i sekvence te generativne modele.

Raspoređivanje Kerasa

Keras modeli mogu se primijeniti na širokom rasponu platformi, možda više od bilo kojeg drugog okvira za duboko učenje. To uključuje iOS putem CoreML-a (podržava Apple); Android, putem TensorFlow Android runtime; u pregledniku, putem Keras.js i WebDNN; na Google Cloud-u, putem usluge TensorFlow-Serving; u stražnjem dijelu web stranice Python; na JVM-u, putem uvoza modela DL4J; i na Raspberry Pi.

Da biste započeli s Kerasom, pročitajte dokumentaciju, provjerite spremište koda, instalirajte TensorFlow (ili drugi pozadinski mehanizam) i Keras te isprobajte vodič za početak rada za model Keras Sequential. Odatle možete preći na druge vodiče i na kraju istražiti primjere Kerasa.