Deep learning szoftverek

Hasonló dokumentumok
Deep Learning a gyakorlatban Python és LUA alapon Tanítás: alap tippek és trükkök

Aradi Bernadett. 2017/18 ősz. TensorFlow konvolúciós hálózatokhoz 2017/18 ősz 1 / 11

Visszacsatolt (mély) neurális hálózatok

Konvolúciós neurális hálózatok (CNN)

A kibontakozó új hajtóerő a mesterséges intelligencia

Neurális hálózatok elméleti alapjai TULICS MIKLÓS GÁBRIEL

Neurális hálózatok.... a gyakorlatban

Bevezetés a mesterséges intelligencia mély tanulás eszközrendszerébe

Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs rendszerek Tanszék. Neurális hálók. Pataki Béla

Neurális hálózatok bemutató

Intelligens Rendszerek Gyakorlata. Neurális hálózatok I.

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Deep Learning a gyakorlatban Python és LUA alapon Bevezetés

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Intelligens orvosi műszerek VIMIA023

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

2. Gyakorlat Khoros Cantata

BIG DATA ÉS GÉPI TANULÁS KÖRNYEZET AZ MTA CLOUD-ON KACSUK PÉTER, NAGY ENIKŐ, PINTYE ISTVÁN, HAJNAL ÁKOS, LOVAS RÓBERT

Párhuzamos és Grid rendszerek

Pletykaalapú gépi tanulás teljesen elosztott környezetben

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

SAT probléma kielégíthetőségének vizsgálata. masszív parallel. mesterséges neurális hálózat alkalmazásával

Deep Learning a gyakorlatban Python és LUA alapon Hogyan tovább?

S z á m í t ó g é p e s a l a p i s m e r e t e k

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Dr. Schuster György február / 32

Java és web programozás

Webes alkalmazások fejlesztése

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Python tanfolyam Python bevezető I. rész

BASH script programozás II. Vezérlési szerkezetek

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

Gépi tanulás a Rapidminer programmal. Stubendek Attila

Deep Learning: Mélyhálós Tanulás

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Keresés képi jellemzők alapján. Dr. Balázs Péter SZTE, Képfeldolgozás és Számítógépes Grafika Tanszék

Deep Learning a gyakorlatban Python és LUA alapon Felhasználói viselkedés modellezés

Programozási nyelvek (ADA)

Számítógépes Hálózatok GY 8.hét

IBM SPSS Modeler 18.2 Újdonságok

Apple Swift kurzus 3. gyakorlat

Biztonságos PHP a gyakorlatban

MATLAB alapismeretek I.

Laborgyakorlat 3 A modul ellenőrzése szimulációval. Dr. Oniga István

Számítógéppel irányított rendszerek elmélete. Gyakorlat - Mintavételezés, DT-LTI rendszermodellek

Adatbázis rendszerek 7. előadás State of the art

Adatok ábrázolása, adattípusok

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Már megismert fogalmak áttekintése

A programozás alapjai 1 Rekurzió

Neurális Hálók. és a Funkcionális Programozás. Berényi Dániel Wigner GPU Labor

Programozás II. 2. Dr. Iványi Péter

Deep learning. bevezetés

Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)

Teljesen elosztott adatbányászat alprojekt

Peer-to-peer (P2P) gépi tanulás. Hegedűs István

Alternatív processz állapot és statisztika lekérdezési módszer a Linux kernelben

Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs rendszerek Tanszék. Neurális hálók 2. Pataki Béla

Oktatási segédlet 2014

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

Szoftvertechnológia alapjai Java előadások

Hibadetektáló rendszer légtechnikai berendezések számára

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

Python bevezető foglalkozás Python bevezető foglalkozás

KIEGÉSZÍTŽ FELADATOK. Készlet Bud. Kap. Pápa Sopr. Veszp. Kecsk Pécs Szomb Igény

Interfészek. PPT 2007/2008 tavasz.

Számítógépes képelemzés 7. előadás. Dr. Balázs Péter SZTE, Képfeldolgozás és Számítógépes Grafika Tanszék

Számítógépes Hálózatok

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Grafikus folyamatmonitorizálás

Objektum orientált kiterjesztés A+ programozási nyelvhez

Szkriptnyelvek. 1. UNIX shell

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2010/2011 1/363

Fejlett programozási nyelvek C++ Iterátorok

Készítette: Nagy Tibor István

OpenCL - The open standard for parallel programming of heterogeneous systems

Szoftvergyártás: gyártásvezérlés kód-figyeléssel

A Számítógépek hardver elemei

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

Szimulációs technikák

SZOFTVEREK A SORBANÁLLÁSI ELMÉLET OKTATÁSÁBAN

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

A TensorFlow rendszer és a mély tanulás. TensorFlow system and deep learning

UMN Mapserver és a Grass használata a Geológiában. Soós Dániel, Phd. Hallgató Miskolci Egyetem Geodéziai és Bányaméréstani Intézeti Tanszék

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozási nyelvek (ADA)

Szeleteljük fel úgy a tulajdonságteret, hogy az egyes szeletekbe lehetőleg egyfajta objektumok kerüljenek, de túl sok szelet se legyen.

Kommunikációs rendszerek teljesítőképesség-vizsgálata

LOGIKAI TERVEZÉS HARDVERLEÍRÓ NYELVEN. Dr. Oniga István

JNDI - alapok. Java Naming and Directory Interface

Függvények ábrázolása

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

III.6. MAP REDUCE ELVŰ ELOSZTOTT FELDOLGOZÁSI ALGORITMUSOK ÉS TESZTKÖRNYEZET KIDOLGOZÁSA ADATBÁNYÁSZATI FELADATOK VÉGREHAJTÁSÁHOZ

Átírás:

Deep learning szoftverek

Neurális hálózatok - rétegenkénti szemlélet Előreterjesztés Visszaterjesztés Bemeneti réteg Bemeneti réteg x Rejtett réteg (FC, ReLU) C/ x w1 out1 Rejtett réteg (FC, lin) Rejtett réteg (FC, ReLU) C/ out1 w2 Rejtett réteg (FC, lin) out2 Szoftmax réteg (kimeneti réteg) u C/ out2 Szoftmax réteg (kimeneti réteg) C/ u Költségfüggvény Költségfüggvény x/ out1 w1/ out1 out1/ out2 w2/ out2 u/ out2 C/ C

Neurális hálózatok - számítási gráf szemlélet Előreterjesztés x * w1 o1 ReLU o1,rel w2 Minden művelet valamilyen elemi mátrix (tenzor) művelet: Szorzás, összeadás, elemenkénti függvény alkalmazáősa (pl.: nemlinearitás) * o2 soft max u y crossent ropy C

Neurális hálózatok - számítási gráf szemlélet Előreterjesztés C/ x x o1/ x o1/ w1 * w1 C/ w1 C/ o1 o1 o1, o2/ o1, / o1 C/ o1,relu ReLU o1,rel ReLU w2 C/ w2 ReLU o2/ w2 * C/ o2 u/ o2 o2 soft max C/ u u C/ u C/ y crossent ropy C C/ C y C/ y

Caffe U.C. Berkeley Vision and Learning Center (BVLC) Interfészek: C++ Python MATLAB Command line interface Előrecsatolt (konvolúciós) hálók tanítására jó Nem kell kódot írni (csak txt fájlokat) Gépi látás/képfeldolgozás területen elterjedt Dokumentációja nem naprakész: forráskódot érdemes olvasni Több GPU kezelése egy gépen belül: adatpárhuzamosítás

Caffe - fő osztályok Blob Layer Bottom blobokból Top blobokat csinál Net Tárolja az adatokat, deriváltakat Sok Layer, előreterjesztés, visszaterjesztés számításokat végzi Solver A gradiens alapján módosítja a súlyokat

Caffe - Protocol Buffers Minden objektum protobuf sémával van leírva (.proto fájl) Példányosításuk.prototxt fájl segítségével Nyelvfüggetlen Típusos JSON, Google fejlesztése https://github. com/bvlc/caffe/blob/master/src/ caffe/proto/caffe.proto Ebben a fájlban van minden a Cafferól, ez a legjobb és

Caffe - layer Setup: initialize the layer and its connections once at model initialization. Forward: given input from bottom compute the output and send to the top. Backward: given the gradient w.r.t. the top output compute the gradient w.r.t. to the input and send to the bottom. A layer with parameters computes the gradient w. r.t. to its parameters and stores it internally. Minden rétegnek van külön CPU és GPU implementációja

Caffe - net Ez írja le a modellünket A net a layerekből egy irányított, körmentes gráf Visszacsatolt hálózatokat emiatt nem lehet megvalósítani benne name: "LogReg" layer { name: "mnist" type: "Data" top: "data" top: "label" data_param { source: "input_leveldb" batch_size: 64 } } layer { name: "ip" type: "InnerProduct" bottom: "data"...... top: "ip" inner_product_param { num_output: 2 } } layer { name: "loss" type: "SoftmaxWithLoss" bottom: "ip" bottom: "label" top: "loss" }

Caffe - solver scaffolds the optimization bookkeeping and creates the training network for learning and test network(s) for evaluation. iteratively optimizes by calling forward / backward and updating parameters (periodically) evaluates the test networks snapshots the model and solver state throughout the optimization solver módszerek: Stochastic Gradient Descent AdaDelta Adaptive Gradient Adam Nesterov s Accelerated Gradient RMSprop 1. calls network forward to compute the output and loss 2. calls network backward to compute the gradients 3. incorporates the gradients into parameter updates according to the solver method 4. updates the solver state according to learning rate, history, and method

Caffe - tipikus használata 1. Adatok konvertálása (pl.: valamilyen scripttel) a. b. 2. A modell létrehozása (.prototxt fájl megírása) a. b. c. 3. 4. Nem jó, ha a fájlrendszerben sok külön bemeneti fájl van (pl.: sok kép) Adatokat egy óriás fájlba összemásoljuk, tipikusan LMDB vagy HDF5 fájlba Történhet kézzel De generálhatja egy script is (pl.: ResNet 152 réteg) Új vagy már meglévő hálózat (részleges) használata A solver létrehozása (.prototxt fájl megírása) Tanítás a../build/tools/caffe train \ -gpu 0 \ -model path/to/trainval.prototxt \ -solver path/to/solver.prototxt \ -weights path/to/pretrained_weights.caffemodel

Caffe - Model Zoo https://github.com/bvlc/caffe/wiki/model-zoo Megtanított modellekről egy linkgyűjtemény

Torch A NYU-ról indult Facebook, Twitter, DeepMind (ők már nem) használják és fejlesztik C-ben írták Lua scriptnyelven programozható Magas szintű scriptnyelv javascripthez hasonló C-hez könnyen illeszthető Van hozzá JIT, tehát nyugodtan lehet írni benne for ciklust Dokumentáció nem tejles, de használható https://github.com/torch/torch7/blob/master/doc/tensor.md https://github.com/torch/torch7/blob/master/doc/maths.md

Torch - tensor osztály Tensor osztály Mint numpy-ban a tömbök Adattípus könnyen konvertálható (csakúgy, mint numpy-ban) Pl.: double (64 bit) helyett float (32 bit) torch.floattensor GPU-n használat: GPU-n tárolt adat is csak egy adattípus torch.cudatensor Vele végzett műveletek a GPU-n futnak

Torch - nn, cunn, optim,... csomagok Önmagában a torch tensor osztályát ritkán szokás használni Különböző Lua csomagok alapulnak a tensor osztályon A következő csomagokból áll a torch: torch : tensors, class factory, serialization, BLAS nn : neural network Modules and Criterions optim : SGD, LBFGS and other optimization functions gnuplot : ploting and data visualization paths : make directories, concatenate file paths, and other filesystem utilities image : save, load, crop, scale, warp, translate images and such trepl : the torch LuaJIT interpreter cwrap : used for wrapping C/CUDA functions in Lua

Torch - module nn csomag Ami Caffe-ben Net vagy Layer volt, az itt Module Az egész hálózat is Module, és minden réteg is Module Előreterjesztés, visszaterjesztés külön implementálva a Moduleokon belül a Tensor osztállyal Rengeteg Module, folyamatosan készülnek újak Emiatt CPU-n is, GPU-n is könnyen használható https://github.com/torch/nn Saját Module is könnyen írható

Torch - module - példa require 'nn' self.output:resizeas(input):copy(input) local DropoutEx, Parent = torch.class('nn.dropoutex', 'nn.module') self.output:cmul(self.noise) function DropoutEx: init(p) self.output:div(1-self.p) Parent. init(self) self.p = p or 0.5 return self.output end if self.p >= 1 or self.p < 0 then error('<dropoutex> illegal percentage, must be 0 <= p < 1') end function DropoutEx:updateGradInput(input, gradoutput) self.noise = torch.tensor() end self.gradinput:resizeas(gradoutput):copy(gradoutput) self.gradinput:cmul(self.noise) -- simply mask the gradients function DropoutEx:updateOutput(input) with the noise vector self.noise:resizeas(input) self.gradinput:div(1-self.p) if self.p > 0 then return self.gradinput self.noise:bernoulli(1-self.p) else self.noise:zero() end end

Torch - nngraph Modulok összekapcsolása Számítási gráf h1 = nn.linear(20, 20)() h2 = nn.linear(10, 10)() hh1 = nn.linear(20, 1)(nn.Tanh()(h1)) hh2 = nn.linear(10, 1)(nn.Tanh()(h2)) madd = nn.caddtable()({hh1, hh2}) oa = nn.sigmoid()(madd) ob = nn.tanh()(madd) gmod = nn.gmodule({h1, h2}, {oa, ob}) x1 = torch.rand(20) x2 = torch.rand(10) gmod:updateoutput({x1, x2}) gmod:updategradinput({x1, x2}, {torch. rand(1), torch.rand(1)}) graph.dot(gmod.fg, 'Big MLP')

Theano University of Montreal, Yoshua Bengio csapata készítette Számítási gráfok Szimbolikus számítások Python numpy Multi-GPU (adat párhuzamosítás, modell párhuzamosítás) Tetszőleges probléma megoldható vele Visszacsatolt hálók Hesse-mátrix számítás

Theano Szimbolikus változók deklarációja

Theano Háló kimenetének, és a költségfüggvény értékének a kiszámítása - szimbolikusan Számítási gráf definiálása x a dot arelu ReLU w1 dot scores soft max probs w2 crossentropy y loss

Theano Készítsünk egy meghívható python függvényt a számítási gráfunkból, definiálva a bemeneteit és kimeneteit Itt történik a mágia Szimbolikus optimalizáció Natív kóddá fordítás CUDA kóddá fordítás Akár több tíz percig is eltarthat De elég egyszer létrehozni a függvényt

Theano Hívjuk meg a függvényt valódi értékeket tartalmazó numpy tömbökkel

Theano A visszaterjesztés is a számítási gráf része A gradienseket szimbolikusan tudjuk számítani A theano.function megoldja ezt is.

Theano Shared változók Két függvényhívás között megmarad az értéke GPU esetén a GPU RAM-ban marad Így megspórolható az ide-oda másolgatás

Theano Tanítási szabályokat is megadhatjuk a theano.function-nek, ami minden alkalommal végrehajtódik, amikor a függvényt meghívjuk Tanításhoz elég csak a függvényt hívni periodikusan Tanításhoz és kiértékeléshez külön függvényeket csinálhatunk, ugyanabból a számítási gráfból

TensorFlow Google belső fejlesztése (Google Brain) Nagyon hasonló, mint a Theano - számítási gráfok vannak itt is Könnyű vizualizálni (TensorBoard) Multi-GPU és multi-node tanítás (több gépen, több GPU-val) Aktívan fejlesztik, profi csapat áll mögötte Egyre több független projekt épül rá szoftver ökoszisztéma C++, Python http://download.tensorflow.org/paper/whitepaper2015.pdf

TensorFlow - Multi GPU

TensorFlow - Elosztott rendszer

TensorFlow - demo

TensorFlow - vizualizáció (TensorBoard) https://www.tensorflow.org/tensorboard

TensorFlow - vizualizáció (TensorBoard) https://www.tensorflow.org/versions/r0.8/how_tos/graph_viz/index.html

3D konvolúció

Keras Egy magasszintű réteg Theano vagy TensorFlow fölé nem nekünk kell implementálni a neurális háló összefüggéseit, ezek megvannak benne Nehéz debuggolni Ha valami kivétel történik, az nagyon mélyről is jöhet, pl.: Theano belsejéből Nem tudjuk biztosan, hogy mi is történt a Theano és a mi kódunk között

Keras

CNTK Microsoft készíti Egyelőre csak C++ https://github.com/microsoft/cntk Állítólag (Microsoft saját mérése alapján) nagyon hatékonyan párhuzamosít

Egyéb rendszerek BidMach Brainstorm Kaldi MatConvNet MaxDNN Deeplearning4j Lasagne(Theano) Marvin Leaf

Teljesítmény összehasonlítás https://github.com/soumith/convnet-benchmarks

Teljesítmény összehasonlítás https://github.com/soumith/convnet-benchmarks