Programavimas

Apžvalga: „MXNet“ gilus mokymasis spindi „Gluon“

Kai peržiūrėjau „MXNet v0.7“ 2016 m., Pajutau, kad tai buvo perspektyvi giluminio mokymosi sistema, pasižyminti puikiu masteliu (beveik linijiniu GPU klasteriuose), gera automatine diferenciacija ir moderniausia parama CUDA GPU. Aš taip pat maniau, kad jai reikia dirbti su dokumentais ir pamokomis, o pavyzdiniame zoologijos sode reikia daug daugiau pavyzdžių. Be to, norėčiau pamatyti aukšto lygio „MXNet“ sąsają, kurią aš įsivaizdavau kaip „Keras“.

Nuo to laiko buvo padaryta nemaža pažanga. „MXNet“ persikėlė po „Apache Software Foundation“ skėčiu 2017 m. Pradžioje ir, nors vis dar „inkubuoja“ 1.3 versijoje, jis jaučiasi gana gerai išbaigtas.

Nors buvo dirbama su „Keras“ su „MXNet“ galine dalimi, daug svarbesnė tapo kitokia aukšto lygio sąsaja: „Gluon“. Prieš įtraukdami „Gluon“, „MXNet“ galite parašyti lengvą imperatyvųjį kodą arba greitą simbolinį kodą, bet ne abu iš karto. Naudodami „Gluon“ galite sujungti geriausius abu pasaulius tokiu būdu, kuris konkuruoja tiek su „Keras“, tiek su „PyTorch“.

Kas yra „Gluon“, skirta „MXNet“?

Tarp „Gluon“ privalumų yra paprastas kodas, lankstus modeliavimas, dinamiški grafikai ir didelis našumas:

  1. Paprastas, lengvai suprantamas kodas: „Gluon“ siūlo visą „plug-and-play“ neuroninio tinklo blokų rinkinį, įskaitant iš anksto nustatytus sluoksnius, optimizatorius ir inicializatorius.
  2. Lanksti, imperatyvi struktūra: „Gluon“ nereikalauja griežtai apibrėžti neuroninio tinklo modelio, jis labiau suartina mokymo algoritmą ir modelį, kad būtų užtikrintas lankstumas kūrimo procese.
  3. Dinaminiai grafikai: „Gluon“ leidžia kūrėjams apibrėžti dinaminius neuroninių tinklų modelius, ty juos galima sukurti betarpiškai, su bet kokia struktūra ir naudojant bet kurį „Python“ gimtąjį valdymo srautą.
  4. Didelis našumas: „Gluon“ suteikia visas aukščiau išvardytas privilegijas, nepaveikdamas pagrindinio variklio suteikiamo treniruočių greičio.

Šie keturi elementai kartu su labai išplėsta pavyzdžių pavyzdžių kolekcija „Gluon / MXNet“ pasiekia apytikslį paritetą su „Keras / TensorFlow“ ir „PyTorch“, kad būtų lengviau tobulėti ir treniruotis. Galite pamatyti „Gluon“ kodo pavyzdžius, iliustruojančius visas šias charakteristikas, pagrindiniame „Gluon“ puslapyje ir pakartoti „Gluon“ API apžvalgos puslapyje.

„Gluon“ API apima neuroninių tinklo sluoksnių, pasikartojančių neuroninių tinklų, praradimo funkcijų, duomenų rinkinių metodų ir regėjimo duomenų rinkinių funkcionalumą, zoologijos sodo modelį ir eksperimentinių neuronų tinklo metodų rinkinį. Galite laisvai derinti „Gluon“ su standartiniais „MXNet“ ir „NumPy“ moduliais, pavyzdžiui, modulis, autogradasir ndarrayTaip pat su „Python“ valdymo srautais.

„Gluon“ turi gerą sluoksnių, skirtų kurti modelius, pasirinkimą, įskaitant pagrindinius sluoksnius (tankius, iškritusius ir kt.), Konvoliucinius, sujungimo ir aktyvinimo sluoksnius. Kiekvienas iš jų yra vienos linijos skambutis. Jie, be kitų vietų, gali būti naudojami tinklo talpyklose, tokiose kaip gluon.nn.Sequential ().

A „HybridSequential“ tinklą galima išsaugoti talpykloje (paversti simboliniu grafiku), kad būtų užtikrintas didelis našumas naudojant hibridizuoti () metodas:

net = nn. HybridSequential ()

su net.name_scope ():

net.add (nn. Tankus (256, aktyvinimas = "relu"))

net.add (nn. Tankus (128, aktyvinimas = "relu"))

net.add (nn. Tankus (2))

net.hybridize ()

Atkreipkite dėmesį į Tankus sluoksnio metodas gali būti aktyvinimo sluoksnio pavadinimas kaip parametras. Tai yra vienas iš daugelio Gluono ir Keraso panašumų.

Nei Nuoseklus nei „HybridSequential“ konteineriai yra dokumentuojami kaip „Gluon“ API dalis. Kaip atradau ieškodama šaltinio kodo medžio, jie įdiegti inkubatoriuje-mxnet / python / mxnet / gluon / nn / basic_layers.py.

Kas naujo „MXNet 1.3“?

„MXNet v1.3“ apima ilgą naujų funkcijų, patobulinimų ir klaidų taisymų sąrašą. Svarbiausi dalykai yra galimybė hibridizuoti RNN (pasikartojančio neuroninio tinklo) sluoksnius, kad būtų galima atlikti našumą, naujus ir atnaujintus iš anksto apmokytus regėjimo modelius, modelių eksportavimą į ONNX („Open Neural Network Exchange“) formatą ir „Nvidia TensorRT“ integravimą vykdymo metu į „MXNet“, siekiant paspartinti išvadą. . Be to, integravus „Intel MKL“ („Math Kernel Library“) į „MXNet“, iki 4 kartų pagerėja „Intel“ procesorių našumas intensyvioms operacijoms, įskaitant konvoliucijos mazgus.

„MXNet“ bendruomenė daugiau dėmesio skyrė kokybės užtikrinimui ir nuolatinei integracijai. Tarp veiksmų, kurių buvo imtasi, reikia integruoti pavyzdinius užrašų knygeles iš „Deep Learning: The Straight Dope“ vadovo į naktinį KI testavimą.

„MXNet“ diegimas be ašarų

Jei jau turite veikiantį, dabartinį „Python“, „MXNet“ ir „Jupyter“ bloknotų su „Notedown“ diegimą, galite pereiti į kitą skyrių. Kitu atveju prašau sekti paskui.

Negaliu pasakyti, kiek problemų turėjau su senesnėmis skirtingų programinės įrangos komponentų versijomis, dėl kurių atsirado neaiškių klaidų, taip pat kitų paketų diegimo trikdžių, kol išsiaiškinau šią atkartojamą seką. Tokiu būdu neturėtumėte susidurti su klaidomis, išskyrus savo kodą, ir neturėtumėte sulaužyti kitų gilių mokymosi sistemų, kurias galbūt įdiegėte.

Ar tai vienintelis galimas diegimo variantas? Ne zinoma ne. Dar lengviau paleisti „MXNet“ „Amazon SageMaker“ arba paleisti „Deep Learning AMI“ AWS, kuriame jau yra viskas, ko jums reikia.

Pirmiausia įdiekite naujausią „Python 3“ versiją savo platformai. (Turėjau problemų paleisdamas „MXNet“ su „Python 2“ ar ankstesnėmis „Python 3“ versijomis.) Siūlau įdiegti „Python 3“ iš „Python.org“. Jei jums labiau patinka „Anaconda“ ar „MiniConda“ aplinka, vietoj to galite įdiegti „Python 3“ ir galbūt praleisti „Jupyter“ diegimo veiksmą.

Patikrinkite, ar galite paleisti pitonas3 iš komandinės eilutės ir kad ji praneša apie naujausią versiją. 2018 m. Spalio pabaigos instaliacijoje python3 -V grąžina Python 3.7.1; jūsų versija gali būti vėlesnė.

Tada įdiekite „Jupyter“. Aš naudojau pip. Šio veiksmo nereikia, jei įdiegėte „Anaconda“, kuri pagal numatytuosius nustatymus įdiegia „Jupyter“.

python3 -m pip install --upgrade pip

python3 -m pip įdiegti jupyter

Jei bėgsi jupyter sąsiuvinis iš komandinės eilutės turėtumėte pamatyti atidarytą naršyklės langą ir sugebėti sukurti naują bloknotą su „Python 3“ branduoliu. Uždarykite tuos du langus ir sustabdykite nešiojamojo kompiuterio serverį, paprastai komandinėje eilutėje du kartus paspausdami „Ctrl-c“.

Dabar įdiekite „Notedown“ naudodami „tarball“, kaip aprašyta „Gluon“ avarijos kurse „Readme“. „Notedown“ papildinys leidžia „Jupyter“ skaityti užrašų knygutes, išsaugotas žymėjimo formatu, o tai naudinga ir avarijos eigai, ir „Deep Learning: The Straight Dope“.

„pip install“ //github.com/mli/notedown/tarball/master

Dūmų bandymas tai vykdant „Jupyter“ su „Notedown“:

„jupyter“ užrašų knygelė --NotebookApp.contents_manager_class = 'notownown.NotedownContentsManager'

Dar kartą uždarykite visus tinklalapius ir sustabdykite nešiojamojo kompiuterio serverį.

Dabar mes esame pasirengę sukurti virtualią aplinką „MXNet“. Jei esate „Anaconda“ vartotojas, galite sukurti virtualią aplinką su „conda“. Aš naudoju gimtąją „Python3 venv“ priemonę, pradedant nuo savo namų katalogo:

python3 -m venv envs / mxnet

Dabar suaktyvinkite virtualią aplinką ir įdiekite „MXNet“ savo platformai. Aš pasirinkau „MXNet build“ su MKL („Intel“ didelio našumo biblioteka, skirta jo procesoriams), nes naudojau „Mac“ (kuriam nėra CUDA GPU dvejetainio „MXNet“), bet jei turite naujausią „Nvidia“ GPU su CUDA, įdiegtu „Linux“ arba „Windows“, galite įdiegti „MXNet“ versiją su CUDA ir MKL palaikymu. „Bash“ apvalkale „MXNet“ diegimas virtualioje aplinkoje buvo toks:

šaltinis envs / mxnet / bin / aktyvuoti

„pip install mxnet-mkl“

Aktyvinimas šiek tiek skiriasi „C“ ir „Fish“ apvalkaluose, nes galite tiesiogiai paleisti aktyvavimo scenarijų, o ne naudoti šaltinis. Bet kokiu atveju turėsite suaktyvinti aplinką, kai tik norite grįžti prie šio „MXNet“ diegimo uždarę apvalkalą. Jei nesate savo namų kataloge, „Bash“ aktyvinimo komanda būtų tokia:

šaltinis ~ / envs / mxnet / bin / aktyvuoti

Išbandykite „MXNet“ diegimą komandinėje eilutėje paleisdami „Python 3“ ir importuodami ką tik įdiegtą „MXNet“ biblioteką. Atkreipkite dėmesį, kad („mxnet“) prefiksas komandinėje eilutėje reiškia, kad esame virtualioje aplinkoje.

(mxnet) Martins-Retina-MacBook: ~ martinheller $ python3

„Python 3.7.1“ (v3.7.1: 260ec2c36a, 2018 m. Spalio 20 d., 03:13:28)

[Clang 6.0 (clang-600.0.57)] ant Darvino

Norėdami gauti daugiau informacijos, įveskite „pagalba“, „autorių teisės“, „kreditai“ arba „licencija“.

>>> importuokite „mxnet“ kaip „mx“

>>> iš mxnet importo nd

>>> nd.array (((1,2,3), (5,6,7)))

[[1. 2. 3.]

 [5. 6. 7.]]

>>> ^ D

(mxnet) Martins-Retina-MacBook: ~ martinheller $

Dabar mes esame pasirengę išbandyti „MXNet“ „Jupyter“ nešiojamame kompiuteryje su „Notedown“ virtualioje aplinkoje, kurioje įdiegėme „MXNet“:

Dabar, kai išbandėte „MXNet“ diegimą „Jupyter“ užrašų knygelėje, galite atlikti kitą žingsnį ir išsamiau išbandyti „Gluon“. „GitHub“ naršykite iki „gluon-api / gluon-api repo“ ir atsisiųskite „Jupyter“ pavyzdinį kodą. Pereikite į katalogą, kuriame atsisiuntėte bloknotą, jei reikia, suaktyvinkite savo virtualią aplinką „MXNet“, paleiskite „Jupyter“ bloknotą, atidarykite pavyzdį ir paleiskite jį. Gali užtrukti, kol baigsite mokymus. Jei viskas gerai, pamatysite panašų tekstą:

„Gluon“ ir „MXNet Module“ pamokos

„MXNet“ dabar turi daug „Gluon“ ir „Module API“ vadovėlių. Jau minėjau ilgą gilaus mokymosi kartu su „Gluon“ kursą „Gilus mokymasis: tiesus dopas“ ir trumpą versiją - 60 minučių trukmės „Gluon Crash Course“.

Be to, yra apie 30 „Gluon“ mokymo programų, skirtų „Python“. Modulio API pusėje yra apie 24 „Python“ pamokymai, penki „Scala“, du „C ++“, devyni „R“ ir keturi „Perl“.

Kai šių metų rugsėjį apžvelgiau „Keras“, pasakiau, kad „jei šiandien pradėčiau naują giluminio mokymosi projektą, greičiausiai atlikčiau tyrimą su„ Keras “. Aš tuo nebesu taip tikras. „Gluon / MXNet“ yra beveik toks pat geras pasirinkimas kaip „Keras“ / „TensorFlow“, norint atlikti gilų mokymąsi apie procesorius ir GPU.

Apatinėje pusėje „MXNet“ šiuo metu trūksta TPU ar FPGA palaikymo, skirtingai nei „TensorFlow“, o grafikams vizualizuoti trūksta „TensorFlow“ „TensorBoard“ atitikmens. Be to, „Keras“ / „TensorFlow“ ekosistema yra didesnė nei „Gluon / MXNet“.

„Keras“ galima naudoti daugiau aplinkų nei „Gluon“, bet jūs gali Pridėkite „Gluon“ modelius, kad galėtumėte numatyti „Android“, „iOS“, „Raspberry Pi“ ir „Nvidia Jetson“ įrenginius, be kompiuterių, galinčių mokyti modelius ir „TensorRT“. Gluonas ir Kerasas šiuo metu yra brandesni nei „PyTorch“, kuris vis dar yra beta būsenos. „PyTorch“ ir „Gluon“ gali dinamiškai kurti modelius; Keras šiuo metu negali.

Galiausiai pasirinkimas, kurią giluminio mokymosi sistemą naudoti, gali būti susijęs su jūsų specifiniais reikalavimais arba tuo, ką žinote ir patinka. Tačiau dėka „Gluon“ ir kitų dramatiškų patobulinimų (dokumentuose, mokymo programose, modeliuose ir kt.) „MXNet“ yra toks pat geras pasirinkimas kaip „TensorFlow“ ar „PyTorch“ giliam mokymuisi.

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