Programavimas

Kas yra Keras? Paaiškinta giluminio neuroninio tinklo API

Nors gilūs neuroniniai tinklai yra pyktis, pagrindinių sistemų sudėtingumas kliudė jas naudoti kūrėjams, naujiems mašininio mokymosi srityje. Buvo pateikti keli patobulintų ir supaprastintų aukšto lygio API, skirtų neuroninių tinklų modeliams kurti, pasiūlymai. Visi jie iš tolo atrodo panašūs, tačiau atidžiau panagrinėję rodo skirtumus.

„Keras“ yra viena iš pirmaujančių aukšto lygio neuroninių tinklų API. Jis parašytas „Python“ ir palaiko kelis galinius neuroninio tinklo skaičiavimo variklius.

„Keras“ ir „TensorFlow“

Atsižvelgiant į tai, kad „TensorFlow“ projektas priėmė „Keras“ kaip aukšto lygio API būsimam „TensorFlow 2.0“ leidimui, atrodo, kad „Keras“ a nugalėtojas, jei nebūtinai nugalėtojas. Šiame straipsnyje mes išnagrinėsime „Keras“ principus ir įgyvendinimą, norėdami suprasti, kodėl tai yra patobulinimas, palyginti su žemo lygio gilaus mokymosi API.

Net „TensorFlow 1.12“ versijoje oficialioje „Pradėkite nuo„ TensorFlow “mokymo programoje naudojama„ TensorFlow “įmontuota aukšto lygio„ Keras “API, tf.keras. Priešingai, „TensorFlow Core“ API reikia dirbti su „TensorFlow“ skaičiavimo grafikais, tensorais, operacijomis ir sesijomis, kai kuriuos iš jų gali būti sunku suprasti, kai tik pradedate dirbti su „TensorFlow“. Yra keletas pranašumų naudojant žemo lygio „TensorFlow Core“ API, dažniausiai derinant, tačiau laimei, jei reikia, galite maišyti aukšto ir žemo lygio „TensorFlow“ API.

Keras principai

„Keras“ buvo sukurta tam, kad būtų patogi vartotojui, modulinė, lengvai išplėsta ir dirbanti su „Python“. API buvo sukurta „žmonėms, o ne mašinoms“ ir „vadovaujasi pažintinės apkrovos mažinimo geriausia praktika“.

Neuroniniai sluoksniai, sąnaudų funkcijos, optimizatoriai, inicializavimo schemos, aktyvinimo funkcijos ir reguliavimo schemos yra atskiri moduliai, kuriuos galite sujungti kurdami naujus modelius. Naujus modulius paprasta pridėti kaip naujas klases ir funkcijas. Modeliai apibrėžti „Python“ kode, o ne atskiri modelio konfigūracijos failai.

Kodėl Kerasas?

Didžiausios priežastys naudoti „Keras“ kyla iš jos pagrindinių principų, visų pirma dėl patogumo vartotojui. Be lengvo mokymosi ir modelio kūrimo lengvumo, „Keras“ siūlo plataus pritaikymo, įvairiausių gamybos diegimo galimybių palaikymo, integravimo su mažiausiai penkiais galiniais varikliais („TensorFlow“, CNTK, „Theano“, „MXNet“ ir „PlaidML“) pranašumus, ir stipri parama keliems GPU ir paskirstytiems mokymams. Be to, „Keras“ palaiko „Google“, „Microsoft“, „Amazon“, „Apple“, „Nvidia“, „Uber“ ir kt.

Keras atgal

Tinkamas „Keras“ nedaro savo žemo lygio operacijų, tokių kaip tenzoriniai produktai ir konvulsijos; tai remiasi galiniu varikliu. Nors „Keras“ palaiko kelis galinius variklius, jo pagrindinė (ir numatytoji) galinė dalis yra „TensorFlow“, o pagrindinis palaikytojas yra „Google“. „Keras“ API yra supakuota į „TensorFlow“ kaip tf.keras, kuri, kaip minėta anksčiau, taps pagrindine „TensorFlow“ API nuo „TensorFlow 2.0“.

Norėdami pakeisti užpakalines dalis, tiesiog redaguokite $ NAMAI / .keras / keras.json failą ir nurodykite kitą pavadinimo pavadinimą, pvz., theano arba CNTK. Arba galite nepaisyti sukonfigūruotos galinės pusės apibrėždami aplinkos kintamąjį KERAS_BACKENDarba savo apvalkale, arba „Python“ kode naudodami os.environ ["KERAS_BACKEND"] nuosavybė.

„Keras“ modeliai

Modelis yra pagrindinė „Keras“ duomenų struktūra. Yra du pagrindinis tipų modelių, kuriuos galima įsigyti Keras: Nuoseklus modelis ir Modelis klasė, naudojama su funkcine API.

„Keras“ nuoseklūs modeliai

Nuoseklus modelis yra tiesinė sluoksnių krūva, kurią galima apibūdinti labai paprastai. Štai pavyzdys iš „Keras“ dokumentacijos, kurioje naudojama model.add () apibrėžti du tankius sluoksnius a Nuoseklus modelis:

importuoti keras

iš keras.modelių importas Nuoseklus

iš keras.sluoksniai importuoja Tankus

# Sukurkite nuoseklų modelį su tankiais sluoksniais, naudodami pridėjimo metodą

#Dense vykdo operaciją:

# output = aktyvinimas (taškas (įvestis, branduolys) + šališkumas)

#Units yra sluoksnio išvesties vietos matmenys,

# kuris lygus paslėptų vienetų skaičiui

# Aktyvinimo ir praradimo funkcijas gali nurodyti eilutės arba klasės

model.add (Tankus (vienetai = 10, aktyvinimas = "softmax"))

# Sudarymo metodas konfigūruoja modelio mokymosi procesą

optimizatorius = "sgd",

metrika = ['tikslumas'])

#Fit metodas treniruojasi partijomis

# x_train ir y_train yra „Numpy“ masyvai, kaip ir „Scikit-Learn“ API.

# Įvertinimo metodas apskaičiuoja nuostolius ir metriką

# apmokytam modeliui

# Prognozavimo metodas naudoja apmokytą modelį įvestims

# generuoti išvestis

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

Aukščiau esančio kodo komentarus verta perskaityti. Taip pat verta atkreipti dėmesį į tai, kiek mažai tikrojo kodo yra tikrame kode, palyginti su, tarkime, žemo lygio „TensorFlow“ API. Kiekvienam sluoksnio apibrėžimui reikalinga viena kodo eilutė, sudarant (mokymosi proceso apibrėžimą) reikia vienos kodo eilutės, o pritaikant (mokant), įvertinant (apskaičiuojant nuostolius ir metriką) ir numatant iš apmokyto modelio išvestis, reikia vienos kodo eilutės .

„Keras“ funkcinė API

„Keras“ eilinis modelis yra paprastas, tačiau modelio topologijoje ribotas. „Keras“ funkcinė API yra naudinga kuriant sudėtingus modelius, pvz., Kelių įvesties / daugelio išėjimų modelius, nukreiptus aciklinius grafikus (DAG) ir modelius su bendrais sluoksniais.

Funkcinė API naudoja tuos pačius sluoksnius kaip ir „Sequential“ modelis, tačiau suteikia daugiau lankstumo juos sujungiant. Funkcinėje API pirmiausia apibrėžkite sluoksnius, tada sukurkite modelį, sukompiliuokite jį ir pritaikykite (mokykite). Vertinimas ir numatymas iš esmės yra tokie patys kaip sekvencinio modelio, todėl jie buvo praleisti toliau pateiktame pavyzdžio kode.

iš keras.layers importuoja Input, Dense

iš keras.models importo modelis

# Tai grąžina tensorių

# sluoksnio egzempliorius iškviečiamas tenzorui ir pateikia tenzorą

x = tankus (64, aktyvinimas = "relu") (x)

numatymai = tankus (10, aktyvinimas = "softmax") (x)

# Tai sukuria modelį, kuris apima

# įvesties sluoksnis ir trys tankūs sluoksniai

model.compile (optimizatorius = 'rmsprop',

nuostolis = "kategorinė_krosentropija",

metrika = ['tikslumas'])

model.fit (duomenys, etiketės) # pradeda treniruotis

Keras sluoksniai

Ankstesniuose pavyzdžiuose mes tik naudojome Tankus sluoksniai. „Keras“ turi platų iš anksto nustatytų sluoksnių tipų pasirinkimą, taip pat palaiko savo sluoksnių rašymą.

Pagrindiniai sluoksniai apima Tankus (taškinis produktas plius šališkumas), Aktyvinimas (perdavimo funkcija arba neurono forma), Iškristi (atsitiktine tvarka nustatykite įvesties vienetų dalį į 0 kiekvieną treniruotės atnaujinimą, kad išvengtumėte pertekliaus), Lambda (įveskite savavališką išraišką kaip Sluoksnis objektas) ir keletas kitų. Konvoliucijos sluoksniai (filtro naudojimas funkcijų žemėlapiui sukurti) eina nuo 1D iki 3D ir apima dažniausiai pasitaikančius variantus, tokius kaip apkarpymas ir perkeltas konvoliucijos sluoksnis kiekvienam matmeniui. 2D konvekcija, kurią įkvėpė regos žievės funkcionalumas, dažniausiai naudojama atpažinti vaizdus.

Kaupimo (sumažinimo) sluoksniai tęsiasi nuo 1D iki 3D ir apima dažniausiai pasitaikančius variantus, tokius kaip maksimalus ir vidutinis sujungimas. Lokaliai sujungti sluoksniai veikia kaip konvekciniai sluoksniai, išskyrus tai, kad svoriai nėra dalijami. Pasikartojantys sluoksniai apima paprastą (visiškai sujungtą pasikartojimą), vartus, LSTM ir kitus; tai yra naudinga apdorojant kalbą, be kitų programų. Triukšmo sluoksniai padeda išvengti per didelio montavimo.

„Keras“ duomenų rinkiniai

Keras pateikia septynis bendrus giluminio mokymosi pavyzdinius duomenų rinkinius per keras.duomenų rinkiniai klasė. Tai apima mažus spalvotus „cifar10“ ir „cifar100“ vaizdus, ​​IMDB filmų apžvalgas, „Reuters“ naujienų temas, „MNIST“ ranka rašomus skaitmenis, „MNIST“ mados vaizdus ir Bostono būsto kainas.

„Keras“ programos ir pavyzdžiai

„Keras“ taip pat tiekia dešimt gerai žinomų modelių, vadinamų „Keras Applications“, iš anksto paruoštais prieš „ImageNet“: „Xception“, „VGG16“, „VGG19“, „ResNet50“, „InceptionV3“, „InceptionResNetV2“, „MobileNet“, „DenseNet“, „NASNet“, „MobileNetV2TK“. Tai galite naudoti norėdami nuspėti vaizdų klasifikaciją, išskirti iš jų ypatybes ir tiksliai sureguliuoti modelius pagal skirtingą klasių rinkinį.

Beje, esamų modelių koregavimas yra geras būdas paspartinti treniruotes. Pavyzdžiui, galite pridėti sluoksnius, kaip norite, užšaldyti pagrindinius sluoksnius, kad išmokytumėte naujus sluoksnius, tada atšaldykite kai kuriuos pagrindinius sluoksnius, kad tiksliai sureguliuotumėte mokymą. Nustatydami galite užšaldyti sluoksnį layer.trainable = Klaidinga.

„Keras“ pavyzdžių saugykloje yra daugiau nei 40 pavyzdinių modelių. Jie apima regėjimo modelius, tekstą ir sekas bei generatyvinius modelius.

Dislokuoti Kerasą

„Keras“ modelius galima pritaikyti įvairiose platformose, galbūt labiau nei bet kurioje kitoje giluminio mokymosi sistemoje. Tai apima „iOS“ per „CoreML“ (palaikoma „Apple“); „Android“ per „TensorFlow Android“ vykdymo laiką; naršyklėje, per Keras.js ir WebDNN; „Google Cloud“, per „TensorFlow-Serving“; „Python“ žiniatinklio programos galinėje dalyje; JVM, naudojant DL4J modelio importą; ir ant Raspberry Pi.

Norėdami pradėti naudotis „Keras“, perskaitykite dokumentaciją, patikrinkite kodų saugyklą, įdiekite „TensorFlow“ (arba kitą programinės įrangos variklį) ir „Keras“ bei išbandykite „Keras Sequential“ modelio darbo pradžios pamoką. Iš ten galite pereiti prie kitų pamokų ir galų gale ištirti „Keras“ pavyzdžius.