Kako koristiti TensorFlow u pregledniku

Iako s TensorFlowom možete trenirati jednostavne neuronske mreže s relativno malim količinama podataka o treningu, za duboke neuronske mreže s velikim nizovima podataka o treningu stvarno trebate koristiti Nvidia GPU-ove ili Google TPU-ove ili FPGA-e za ubrzanje. Alternativa je donedavno bila tjednima trenirati na klasterima procesora.

Jedna od inovacija predstavljenih s TensorFlow 2.0 je implementacija JavaScript-a, TensorFlow.js. Ne bih očekivao da će to poboljšati brzinu treninga ili zaključivanja, ali ima, s obzirom na podršku za sve GPU-ove (ne samo za GPU-ove koji podržavaju CUDA-u) putem WebGL API-ja.

[Također na: Pregled TensorFlow 2.0: Lakše strojno učenje]

Što je TensorFlow.js?

TensorFlow.js je knjižnica za razvoj i osposobljavanje modela strojnog učenja u JavaScriptu te njihovo raspoređivanje u preglednik ili na Node.js. Možete koristiti postojeće modele, pretvoriti Python TensorFlow modele, upotrijebiti učenje prijenosa za prekvalifikaciju postojećih modela s vlastitim podacima i razvoj modela od nule.

TensorFlow.js se završava

TensorFlow.js podržava više stražnjih krajeva za izvršavanje, iako istodobno može biti aktivan samo jedan. Okruženje TensorFlow.js Node.js podržava upotrebu instalirane gradnje Python / C TensorFlow kao pozadine, što zauzvrat može koristiti dostupno hardversko ubrzanje stroja, na primjer CUDA. Postoji i pozadinski kraj zasnovan na JavaScriptu za Node.js, ali njegove su mogućnosti ograničene.

U pregledniku TensorFlow.js ima nekoliko pozadina s različitim karakteristikama. WebGL stražnji kraj pruža GPU podršku koristeći WebGL teksture za pohranu i WebGL sjene za izvršenje, a može biti i do 100 puta brži od običnog pozadinskog procesora. WebGL ne zahtijeva CUDA, tako da može iskoristiti bilo koji GPU koji je prisutan.

Pozadina WebAssembly (WASM) TensorFlow.js za preglednik koristi knjižnicu XNNPACK za optimiziranu CPU implementaciju operatora neuronske mreže. WASM pozadina je obično puno brža (10x do 30x) od JavaScript pozadine CPU-a, ali je obično sporija od pozadine WebGL, osim za vrlo male modele. Vaša kilometraža može varirati, pa testirajte i WASM i WebGL pozadine za vlastite modele na vlastitom hardveru.

Modeli i slojevi TensorFlow.js

TensorFlow.js podržava dva API-ja za izgradnju modela neuronske mreže. Jedan je Layers API, koji je u osnovi isti kao Keras API u TensorFlowu 2. Drugi je Core API, koji je u osnovi izravna manipulacija tenzorima.

Poput Kerasa, API slojeva TensorFlow.js ima dva načina za stvaranje modela: sekvencijalni i funkcionalni. Slijedni API je linearni snop slojeva, implementiran s popisom slojeva (kao što je prikazano dolje) ili model.add()metodom:

const model = tf.sequential ({

 slojevi: [

   tf.layers.dense ({inputShape: [784], jedinice: 32, aktivacija: 'relu'}),

   tf.layers.dense ({jedinice: 10, aktivacija: 'softmax'}),

 ]

});

Funkcionalni API koristi tf.model()API i može stvoriti proizvoljne DAG (usmjereni aciklički graf) mreže:

// Stvaranje proizvoljnog grafa slojeva, njihovim povezivanjem

// putem metode apply ().

const input = tf.input ({oblik: [784]});

const thick1 = tf.layers.dense ({jedinice: 32, aktivacija: 'relu'}). primijeniti (ulaz);

const thick2 = tf.layers.dense ({jedinice: 10, aktivacija: 'softmax'}). primijeniti (gusti1);

const model = tf.model ({ulazi: ulazi, izlazi: gusti2});

Core API može postići iste ciljeve, s različitim kodom i manje intuitivne veze sa slojevima. Model u nastavku može izgledati kao osnovne operacije tenzora, ali stvara istu mrežu kao i dvije prethodne formulacije. Imajte na umu upotrebu relu()i softmax(), koje su obje operacije neuronske mreže, u model()donjoj funkciji.

// Težine i pristranosti za dva gusta sloja.

const w1 = tf.varijable (tf.randomNormal ([784, 32]));

const b1 = tf.varijable (tf.randomNormal ([32]));

const w2 = tf.varijable (tf.randomNormal ([32, 10]));

const b2 = tf.varijable (tf.randomNormal ([10]));

model funkcije (x) {

  vrati x.matMul (w1) .add (b1) .relu (). matMul (w2) .add (b2) .softmax ();

}

Unaprijed izrađeni modeli TensorFlow.js

Postoji preko desetak unaprijed izgrađenih modela TensorFlow.js dokumentiranih, dostupnih u spremištu i hostiranih na NPM (za upotrebu u Node.js) i unpkg (za upotrebu u pregledniku). Ove modele možete koristiti kao isporučene ili za učenje transfera. Uz malo posla, možete ih koristiti i kao gradivne blokove za druge modele.

Nekoliko od ovih modela koristi kameru uređaja u stvarnom vremenu, na primjer ručno:

Popis u nastavku prikladan je indeks većine unaprijed zapakiranih modela TensorFlow.js.

  • Klasifikacija slika
  • Otkrivanje predmeta
  • Segmentacija tijela
  • Procjena poze
  • Otkrivanje toksičnosti teksta
  • Univerzalni koder rečenice
  • Prepoznavanje naredbi govora
  • KNN klasifikator
  • Jednostavno otkrivanje lica
  • Semantička segmentacija
  • Otkrivanje orijentira na licu
  • Otkrivanje poze ruke
  • Odgovor na prirodni jezik

Što je ml5.js?

ml5.js je otvoreno, prijateljsko sučelje visoke razine na visokoj razini za TensorFlow.js razvijeno prvenstveno u NYU. ml5.js omogućuje trenutni pristup u pregledniku unaprijed obučenim modelima za otkrivanje ljudskih poza, generiranje teksta, oblikovanje slike s drugom, komponiranje glazbe, otkrivanje tona, uobičajeni odnosi riječi na engleskom jeziku i još mnogo toga. Iako je TensorFlow.js prvenstveno usmjeren na znanstvenike i programere podataka, ml5.js želi podržati šire razumijevanje strojnog učenja u javnosti i potaknuti dublje bavljenje etičkim računanjem, odgovornim prikupljanjem podataka te dostupnošću i raznolikošću ljudi i perspektivama u tehnologiji i umjetnosti .

Većina primjera u ml5.js ovisi o modelima TensorFlow.js. Pakirane su kao web stranice koje možete pokretati takve kakve jesu ili ih uređivati, na primjer da biste koristili različite slike.

Demo: Klasifikacija šarenice s TensorFlow.js

Poznati skup podataka o diskriminaciji Iris, koji je RA Fisher pokrenuo 1936. godine radi ilustracije linearne diskriminacijske analize, i dalje se koristi kao test za statističke metode i metode klasifikacije strojnog učenja. Koristi četiri značajke, duljinu i širinu cvjetnih čašica i latica, za klasifikaciju tri vrste perunika, s po 50 uzoraka svake vrste. (Fisherov izvorni rad objavljen je u Annals of Eugenics , koji govori o znanosti 1936. više nego o podacima ili statistikama.)

Ako na tim podacima provedete analizu klastera, dvije će vrste dijeliti jednu klaster, a treću (I. Setosa) u zasebnoj klasteru. S druge strane, analiza glavnih komponenata može prilično dobro razdvojiti sve tri vrste.

Uzorak TensorFlow.js uklapa podatke Iris s dva potpuno povezana (gusta) sloja neuronske mreže, kao što je prikazano u ekstraktu koda u nastavku.

// Definiraj topologiju modela: dva gusta sloja.

const model = tf.sequential ();

model.add (tf.layers.dense (

{jedinice: 10, aktivacija: 'sigmoid', inputShape: [xTrain.shape [1]]}

));

model.add (tf.layers.dense ({jedinice: 3, aktivacija: 'softmax'}));

model.summary ();

optimizator const = tf.train.adam (params.learningRate);

model.compile ({

optimizer: optimizer,

gubitak: 'categoricalCrossentropy',

metrika: ['točnost'],

});

Kao što možete vidjeti na donjoj snimci zaslona, ​​ovaj model pristojno klasificira tri vrste. Ako se, pak, poigrate s parametrima, otkrit ćete da se ponovno dogodi neka zbrka između dviju vrsta (one u istoj skupini) ako ponovite više od 40 epoha.

Pretvaranje modela Python TensorFlow u JavaScript

Dio spremišta TensorFlow.js sadrži pretvarač za spremljene modele TensorFlow i Keras. Podržava tri formata: SavedModel (zadani za TensorFlow), HDF5 (zadani za Keras) i TensorFlow Hub. Pretvarač možete koristiti za spremljene modele iz standardnih spremišta, modele koje ste sami obučili i modele koje ste pronašli drugdje.

Postoje zapravo dva koraka do pretvorbe. Prvi je korak pretvoriti postojeći model u datoteke model.json i binarne težine. Drugi je korak upotreba API-ja za učitavanje modela u TensorFlow.js, bilo tf.loadGraphModelza pretvorene modele TensorFlow i TensorFlow Hub, bilo tf.loadLayersModelza pretvorene Keras modele.

Koristeći učenje transfera

TensorFlow.js podržava učenje transfera u osnovi na isti način kao i TensorFlow. Dokumentacija sadrži primjere za prilagodbu MobileNeta za vaše slike i prilagodbu modela za prepoznavanje govornih naredbi za vaše vlastite klase zvuka. U osnovi, ono što radite u svakom od ovih kodnih laboratorija je dodavanje malog prilagođenog klasifikatora na vrh obučenog modela i njegovo vježbanje.

Sve u svemu, TensorFlow.js može učiniti gotovo sve što TensorFlow može. Međutim, s obzirom na to da ciljana okruženja za TensorFlow.js (vrtni grafički procesori za igre) obično imaju manje GPU memorije od velikih Nvidijinih poslužiteljskih GPU-a koji se obično koriste za TensorFlow duboko učenje, možda ćete morati smanjiti veličinu svog model kako bi se pokrenuo u pregledniku. Uslužni program za pretvorbu čini nešto od toga umjesto vas, ali možda ćete morati ručno vaditi slojeve i smanjiti veličine serija za svoj trening.