Programmering

Hva er Keras? Den dype nevrale nettverket API forklart

Mens dype nevrale nettverk er raseri, har kompleksiteten til de store rammene vært en barriere for deres bruk for utviklere som er nye for maskinlæring. Det har vært flere forslag for forbedrede og forenklede APIer på høyt nivå for å bygge nevrale nettverksmodeller, som alle har en tendens til å ligne på avstand, men viser forskjeller ved nærmere undersøkelse.

Keras er et av de ledende API-ene på nevrale nettverk på høyt nivå. Den er skrevet i Python og støtter flere back-end nevrale nettverksberegningsmotorer.

Keras og TensorFlow

Gitt at TensorFlow-prosjektet har adoptert Keras som API på høyt nivå for den kommende TensorFlow 2.0-utgivelsen, ser Keras ut til å være en vinner, om ikke nødvendigvis de vinner. I denne artikkelen vil vi utforske prinsippene og implementeringen av Keras, med et øye for å forstå hvorfor det er en forbedring i forhold til dyplæring APIer på lavt nivå.

Selv i TensorFlow 1.12 bruker den offisielle Kom i gang med TensorFlow-opplæringen Keras API på høyt nivå innebygd i TensorFlow, tf.keras. Derimot krever TensorFlow Core API å jobbe med TensorFlow beregningsdiagrammer, tensorer, operasjoner og økter, hvorav noen kan være vanskelig å forstå når du bare begynner å jobbe med TensorFlow. Det er noen fordeler med å bruke TensorFlow Core API på lavt nivå, hovedsakelig ved feilsøking, men heldigvis kan du blande TensorFlow APIer på høyt nivå og lavt nivå etter behov.

Keras prinsipper

Keras ble opprettet for å være brukervennlig, modulær, enkel å utvide og å jobbe med Python. API-en var "designet for mennesker, ikke maskiner", og "følger beste praksis for å redusere kognitiv belastning."

Nevrale lag, kostnadsfunksjoner, optimaliseringsprogrammer, initialiseringsskjemaer, aktiveringsfunksjoner og reguleringsplaner er alle frittstående moduler som du kan kombinere for å lage nye modeller. Nye moduler er enkle å legge til, som nye klasser og funksjoner. Modeller er definert i Python-kode, ikke separate modellkonfigurasjonsfiler.

Hvorfor Keras?

De største grunnene til å bruke Keras stammer fra de ledende prinsippene, først og fremst den om å være brukervennlig. Utover enkel læring og enkel modellbygging, tilbyr Keras fordelene med bred adopsjon, støtte for et bredt spekter av produksjonsalternativer, integrering med minst fem back-end-motorer (TensorFlow, CNTK, Theano, MXNet og PlaidML), og sterk støtte for flere GPUer og distribuert opplæring. I tillegg støttes Keras av Google, Microsoft, Amazon, Apple, Nvidia, Uber og andre.

Keras bakenden slutter

Keras proper utfører ikke sine egne operasjoner på lavt nivå, for eksempel tensorprodukter og kramper; det er avhengig av en back-end motor for det. Selv om Keras støtter flere bakmotorer, er den primære (og standard) bakenden TensorFlow, og den primære støtteapparatet er Google. Keras API kommer pakket i TensorFlow as tf.keras, som som nevnt tidligere blir den primære TensorFlow API fra og med TensorFlow 2.0.

For å endre bakenden, bare rediger din $ HOME / .keras / keras.json filen og spesifiser et annet backend-navn, for eksempel theano eller CNTK. Alternativt kan du overstyre den konfigurerte bakenden ved å definere miljøvariabelen KERAS_BACKEND, enten i skallet eller i Python-koden ved hjelp av os.environ ["KERAS_BACKEND"] eiendom.

Keras-modeller

De Modell er kjernen Keras datastruktur. Det er to hoved- typer modeller tilgjengelig i Keras: Sekvensiell modell, og Modell klasse brukt med funksjonell API.

Keras Sekvensielle modeller

De Sekvensiell modellen er en lineær stabel med lag, og lagene kan beskrives veldig enkelt. Her er et eksempel fra Keras-dokumentasjonen som bruker model.add () å definere to tette lag i en Sekvensiell modell:

importer keras

fra keras.models import Sequential

fra keras.layers importerer Tett

#Create sekvensiell modell med tette lag, ved hjelp av add-metoden

#Dense implementerer operasjonen:

# output = aktivering (prikk (input, kernel) + bias)

#Enheter er dimensjonaliteten til utgangsområdet for laget,

# som tilsvarer antall skjulte enheter

#Aktiverings- og tapfunksjoner kan spesifiseres av strenger eller klasser

model.add (Tett (enheter = 10, aktivering = "softmax"))

# Kompileringsmetoden konfigurerer modellens læringsprosess

optimizer = "sgd",

beregninger = ['nøyaktighet'])

# Fit-metoden gjør opplæringen i grupper

# x_train og y_train er Numpy arrays - akkurat som i Scikit-Learn API.

# Evalueringsmetoden beregner tap og beregninger

# for den trente modellen

# Forutsig-metoden bruker den trente modellen på innganger

# for å generere utganger

klasser = modell.forutsig (x_test, batch_size = 128)

Kommentarene i koden ovenfor er verdt å lese. Det er også verdt å merke seg hvor lite cruft det er i den faktiske koden sammenlignet med for eksempel TensorFlow API-er på lavt nivå. Hver lagdefinisjon krever en linje med kode, kompilering (definisjon av læringsprosessen) tar en linje med kode, og tilpasning (opplæring), evaluering (beregning av tap og beregninger), og forutsi utganger fra den opplærte modellen tar hver en linje med kode .

Keras funksjonelle API

Keras Sequential-modellen er enkel, men begrenset i modell topologi. Keras funksjonelle API er nyttig for å lage komplekse modeller, for eksempel multi-input / multi-output-modeller, dirigerte asykliske grafer (DAG), og modeller med delte lag.

Den funksjonelle API bruker de samme lagene som Sequential-modellen, men gir mer fleksibilitet i å sette dem sammen. I funksjonell API definerer du lagene først, og lager deretter modellen, kompilerer den og passer (trener) den. Evaluering og prediksjon er i det vesentlige den samme som i en sekvensiell modell, så har blitt utelatt i eksempelkoden nedenfor.

fra keras.layers importerer Input, Tett

fra keras.models importmodell

# Dette gir en tensor

# en lagforekomst kan kalles på en tensor, og returnerer en tensor

x = Tett (64, aktivering = "relu") (x)

spådommer = Tett (10, aktivering = "softmax") (x)

# Dette skaper en modell som inkluderer

# inngangslaget og tre tette lag

model.compile (optimizer = 'rmsprop',

tap = "categorical_crossentropy",

beregninger = ['nøyaktighet'])

model.fit (data, etiketter) # begynner å trene

Keras lag

I de forrige eksemplene brukte vi bare Tett lag. Keras har et bredt utvalg av forhåndsdefinerte lagtyper, og støtter også skriving av egne lag.

Kjernelag inkluderer Tett (prikkprodukt pluss skjevhet), Aktivering (overføringsfunksjon eller nevronform), Frafall (sett tilfeldig en brøkdel av inngangsenhetene til 0 ved hver treningsoppdatering for å unngå overmontering), Lambda (pakk et vilkårlig uttrykk som en Lag objekt), og flere andre. Konvolusjonslag (bruk av et filter for å lage et funksjonskart) går fra 1D til 3D og inkluderer de vanligste variantene, for eksempel beskjæring og transponert konvolusjonslag for hver dimensjonalitet. 2D-konvolusjon, som ble inspirert av funksjonaliteten til den visuelle cortex, brukes ofte til bildegjenkjenning.

Pooling (nedskalering) lag går fra 1D til 3D og inkluderer de vanligste variantene, for eksempel maks og gjennomsnittlig pooling. Lokalt sammenkoblede lag fungerer som viklingslag, bortsett fra at vektene ikke deles. Gjentatte lag inkluderer enkel (fullt tilkoblet gjentakelse), gated, LSTM og andre; disse er nyttige for språkbehandling, blant andre applikasjoner. Støylag hjelper til med å unngå overmontering.

Keras datasett

Keras leverer syv av de vanligste datasettene for dyp læring via keras.datasets klasse. Det inkluderer cifar10 og cifar100 små fargebilder, IMDB-filmanmeldelser, Reuters-nyheter, MNIST håndskrevne sifre, MNIST motebilder og Boston-boligpriser.

Keras applikasjoner og eksempler

Keras leverer også ti kjente modeller, kalt Keras Applications, forutlært mot ImageNet: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK. Du kan bruke disse til å forutsi klassifiseringen av bilder, trekke ut funksjoner fra dem og finjustere modellene på et annet sett med klasser.

For øvrig er finjustering av eksisterende modeller en god måte å øke hastigheten på treningene. For eksempel kan du legge til lag som du ønsker, fryse grunnlagene for å trene de nye lagene, og deretter frigjøre noen av grunnlagene for å finjustere treningen. Du kan fryse et lag med ved å sette layer.trainable = Falsk.

Keras eksempler arkiv inneholder mer enn 40 eksempler på modeller. De dekker visjonsmodeller, tekst og sekvenser og generative modeller.

Implementerer Keras

Keras-modeller kan distribueres på et bredt spekter av plattformer, kanskje mer enn noe annet rammeverk for dyp læring. Dette inkluderer iOS via CoreML (støttet av Apple); Android, via TensorFlow Android kjøretid; i en nettleser, via Keras.js og WebDNN; på Google Cloud, via TensorFlow-Serving; i en Python webapp bakside; på JVM, via DL4J modellimport; og på Raspberry Pi.

For å komme i gang med Keras, les dokumentasjonen, sjekk ut kodelageret, installer TensorFlow (eller en annen backend-motor) og Keras, og prøv å komme i gang-veiledningen for Keras Sequential-modellen. Derfra kan du gå videre til andre opplæringsprogrammer, og til slutt utforske Keras-eksemplene.

$config[zx-auto] not found$config[zx-overlay] not found