Programmering

Hvad er Keras? Den dybe neurale netværk API forklaret

Mens dybe neurale netværk er raseri, har kompleksiteten af ​​de store rammer været en barriere for deres anvendelse for udviklere, der er nye inden for maskinlæring. Der har været adskillige forslag til forbedrede og forenklede API'er på højt niveau til opbygning af neurale netværksmodeller, som alle har en tendens til at ligne på afstand, men viser forskelle ved nærmere undersøgelse.

Keras er et af de førende API'er på neuralt netværk på højt niveau. Det er skrevet i Python og understøtter flere back-end neurale netværksberegningsmotorer.

Keras og TensorFlow

I betragtning af at TensorFlow-projektet har vedtaget Keras som API på højt niveau for den kommende TensorFlow 2.0-udgivelse, ser Keras ud til at være -en vinder, hvis ikke nødvendigvis det vinder. I denne artikel vil vi undersøge principperne og implementeringen af ​​Keras med et øje mod at forstå, hvorfor det er en forbedring i forhold til dyb lærings-API'er på lavt niveau.

Selv i TensorFlow 1.12 bruger den officielle Kom godt i gang med TensorFlow-tutorial det høje niveau Keras API indlejret i TensorFlow, tf.keras. Derimod kræver TensorFlow Core API at arbejde med TensorFlow-beregningsdiagrammer, tensorer, operationer og sessioner, hvoraf nogle kan være svære at forstå, når du lige er begyndt at arbejde med TensorFlow. Der er nogle fordele ved at bruge TensorFlow Core API på lavt niveau, mest ved fejlfinding, men heldigvis kan du blande TensorFlow API'er på højt niveau og lavt niveau efter behov.

Keras-principper

Keras blev oprettet for at være brugervenlig, modulær, let at udvide og arbejde med Python. API'et var "designet til mennesker, ikke maskiner", og "følger bedste praksis for at reducere kognitiv belastning."

Neurale lag, omkostningsfunktioner, optimeringsprogrammer, initialiseringsordninger, aktiveringsfunktioner og reguleringsplaner er alle enkeltstående moduler, som du kan kombinere for at oprette nye modeller. Nye moduler er enkle at tilføje som nye klasser og funktioner. Modeller er defineret i Python-kode, ikke separate modelkonfigurationsfiler.

Hvorfor Keras?

De største grunde til at bruge Keras stammer fra dets vejledende principper, primært den om at være brugervenlig. Ud over let læring og let modelbygning tilbyder Keras fordelene ved bred anvendelse, support til en bred vifte af produktionsudstyrsmuligheder, integration med mindst fem back-end-motorer (TensorFlow, CNTK, Theano, MXNet og PlaidML), og stærk support til flere GPU'er og distribueret træning. Plus er Keras bakket op af Google, Microsoft, Amazon, Apple, Nvidia, Uber og andre.

Keras bag ender

Keras proper udfører ikke sine egne operationer på lavt niveau, såsom tensorprodukter og krængninger; det er afhængig af en back-end motor til det. Selvom Keras understøtter flere back-end-motorer, er dens primære (og standard) back-end TensorFlow, og dens primære tilhænger er Google. Keras API leveres pakket i TensorFlow som tf.keras, som som nævnt tidligere bliver den primære TensorFlow API fra og med TensorFlow 2.0.

For at skifte bagende skal du blot redigere din $ HJEM / .keras / keras.json fil og angiv et andet backend-navn, f.eks theano eller CNTK. Alternativt kan du tilsidesætte den konfigurerede back-end ved at definere miljøvariablen KERAS_BACKEND, enten i din skal eller i din Python-kode ved hjælp af os.environ ["KERAS_BACKEND"] ejendom.

Keras modeller

Det Model er kernen Keras datastruktur. Der er to vigtigste typer modeller tilgængelige i Keras: Sekventiel model og Model klasse brugt med den funktionelle API.

Keras Sekventielle modeller

Det Sekventiel modellen er en lineær stak af lag, og lagene kan beskrives meget enkelt. Her er et eksempel fra den Keras-dokumentation, der bruger model.add () at definere to tætte lag i en Sekventiel model:

importer keras

fra keras.models import Sekventiel

fra keras.layers importerer tæt

# Opret sekventiel model med tætte lag ved hjælp af add-metoden

#Dense implementerer operationen:

# output = aktivering (prik (input, kerne) + bias)

#Enheder er dimensionaliteten af ​​lagets outputplads,

# som er lig med antallet af skjulte enheder

#Aktiverings- og tabsfunktioner kan specificeres af strenge eller klasser

model.add (tæt (enheder = 10, aktivering = "softmax"))

# Compile-metoden konfigurerer modelens indlæringsproces

optimizer = "sgd",

metrics = ['nøjagtighed'])

# Fit-metoden træner i batches

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

# Evalueringsmetoden beregner tab og metrics

# til den uddannede model

# Forudsigelsesmetoden anvender den uddannede model på input

# for at generere output

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

Kommentarerne i ovenstående kode er værd at læse. Det er også værd at bemærke, hvor lidt cruft der er i den faktiske kode sammenlignet med f.eks.TensorFlow API'er på lavt niveau. Hver lagdefinition kræver en linje kode, kompilering (definition af læringsprocessen) tager en linje kode, og tilpasning (træning), evaluering (beregning af tab og metrics) og forudsigelse af output fra den uddannede model tager hver en linje kode .

Keras funktionelle API

Keras sekventiel model er enkel, men begrænset i model topologi. Keras funktionelle API er nyttig til oprettelse af komplekse modeller, såsom multi-input / multi-output modeller, dirigerede acykliske grafer (DAG'er) og modeller med delte lag.

Den funktionelle API bruger de samme lag som den sekventielle model, men giver mere fleksibilitet i at sammensætte dem. I den funktionelle API definerer du lagene først og opretter derefter modellen, kompilerer den og tilpasser (træner) den. Evaluering og forudsigelse er i det væsentlige de samme som i en sekventiel model, så er udeladt i eksemplet nedenfor.

fra keras.layers importerer input, tæt

fra keras.models import Model

# Dette returnerer en tensor

# en laginstans kan kaldes på en tensor og returnerer en tensor

x = tæt (64, aktivering = "relu") (x)

forudsigelser = tæt (10, aktivering = "softmax") (x)

# Dette skaber en model, der inkluderer

# indgangslaget og tre tætte lag

model.compile (optimizer = 'rmsprop',

loss = "categorical_crossentropy",

metrics = ['nøjagtighed'])

model.fit (data, etiketter) # begynder at træne

Keras lag

I de foregående eksempler brugte vi kun Tæt lag. Keras har et bredt udvalg af foruddefinerede lagtyper og understøtter også skrivning af dine egne lag.

Kernelag inkluderer Tæt (dot-produkt plus bias), Aktivering (overføringsfunktion eller neuronform), Droppe ud (sæt tilfældigt en brøkdel af inputenhederne til 0 ved hver træningsopdatering for at undgå overmontering), Lambda (indpak et vilkårligt udtryk som en Lag objekt) og flere andre. Konvolutionslag (brugen af ​​et filter til at oprette et funktionskort) løber fra 1D til 3D og inkluderer de mest almindelige varianter, såsom beskæring og transponerede foldningslag for hver dimensionalitet. 2D-foldning, der blev inspireret af den visuelle cortex-funktionalitet, bruges ofte til billedgenkendelse.

Pooling (nedskalering) lag løber fra 1D til 3D og inkluderer de mest almindelige varianter, såsom maks. Og gennemsnitlig pooling. Lokalt forbundne lag fungerer som sammenfoldningslag, bortset fra at vægtene ikke deles. Tilbagevendende lag inkluderer enkel (fuldt tilsluttet gentagelse), gated, LSTM og andre; disse er nyttige til sprogbehandling, blandt andre applikationer. Støjlag hjælper med at undgå overmontering.

Keras datasæt

Keras leverer syv af de almindelige datasæt til dyb læring via keras.datasets klasse. Det inkluderer cifar10 og cifar100 små farvebilleder, IMDB-filmanmeldelser, Reuters nyhedswire-emner, MNIST-håndskrevne cifre, MNIST-modebilleder og Boston-boligpriser.

Keras applikationer og eksempler

Keras leverer også ti kendte modeller, kaldet Keras Applications, foruddannet mod ImageNet: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK. Du kan bruge disse til at forudsige klassificeringen af ​​billeder, udtrække funktioner fra dem og finjustere modellerne på et andet sæt klasser.

Forresten er finjustering af eksisterende modeller en god måde at fremskynde træningen på. For eksempel kan du tilføje lag, som du ønsker, fryse basislagene for at træne de nye lag og derefter frigøre nogle af basislagene for at finjustere træningen. Du kan fryse et lag med ved at indstille layer.trainable = Falsk.

Keras eksempler arkiv indeholder mere end 40 eksempler på modeller. De dækker visionmodeller, tekst og sekvenser og generative modeller.

Implementering af Keras

Keras-modeller kan implementeres på en lang række platforme, måske mere end nogen anden dyb læringsramme. Dette inkluderer iOS via CoreML (understøttet af Apple); Android via TensorFlow Android runtime; i en browser via Keras.js og WebDNN; på Google Cloud via TensorFlow-Serving; i en Python webapp-backend; på JVM, via DL4J modelimport; og på Raspberry Pi.

For at komme i gang med Keras skal du læse dokumentationen, tjekke kodelageret, installere TensorFlow (eller en anden backend-motor) og Keras og prøve vejledningen Kom godt i gang til Keras Sequential-modellen. Derfra kan du gå videre til andre tutorials og til sidst udforske Keras-eksemplerne.