Programiranje

Kako uporabljati TensorFlow v brskalniku

Čeprav lahko s TensorFlowom trenirate preproste nevronske mreže z razmeroma majhnimi količinami podatkov o vadbi, za globoke nevronske mreže z velikimi nabori podatkov o vadbi za pospeševanje resnično potrebujete grafične procesorje Nvidia, ki podpirajo CUDA, ali Google TPU ali FPGA. Alternativa je bila do nedavnega tedne trenirati na grozdih CPU-jev.

Ena od novosti, predstavljenih s TensorFlow 2.0, je implementacija JavaScript, TensorFlow.js. Ne bi pričakoval, da bo to izboljšalo hitrost usposabljanja ali sklepanja, vendar se, ob upoštevanju podpore vsem grafičnim procesorjem (ne le grafičnim procesorjem, ki podpirajo CUDA) prek API-ja WebGL.

[Tudi na: Pregled TensorFlow 2.0: lažje strojno učenje]

Kaj je TensorFlow.js?

TensorFlow.js je knjižnica za razvoj in usposabljanje modelov strojnega učenja v JavaScriptu ter njihovo uvajanje v brskalnik ali na Node.js. Uporabite lahko obstoječe modele, pretvorite modele Python TensorFlow, uporabite učenje prenašanja za prekvalifikacijo obstoječih modelov z lastnimi podatki in razvoj modelov iz nič.

TensorFlow.js se konča

TensorFlow.js podpira več povratnih koncev za izvajanje, čeprav je naenkrat lahko aktiven le en. Okolje TensorFlow.js Node.js podpira uporabo nameščene gradnje Python / C TensorFlow kot zaledja, ki lahko nato uporabi razpoložljivo strojno pospeševanje naprave, na primer CUDA. Obstaja tudi zaledje Node.js na osnovi JavaScript, vendar so njegove zmožnosti omejene.

V brskalniku ima TensorFlow.js več hrbtnih koncev z različnimi značilnostmi. Ozadje WebGL nudi podporo GPU z uporabo tekstur WebGL za shranjevanje in senčnike WebGL za izvedbo in je lahko do 100-krat hitrejši od navadnega CPU. WebGL ne potrebuje CUDA, zato lahko izkoristi karkoli GPU, ki je prisoten.

V ozadju brskalnika WebAssembly (WASM) TensorFlow.js uporablja knjižnico XNNPACK za optimizirano izvajanje CPU operaterjev nevronskih omrežij. V ozadju WASM je na splošno veliko hitreje (10x do 30x) kot v ozadju procesorja JavaScript, vendar je običajno počasnejši kot v ozadju WebGL, razen pri zelo majhnih modelih. Vaša kilometrina se lahko razlikuje, zato preizkusite tako WASM kot WebGL za lastne modele na lastni strojni opremi.

Modeli in plasti TensorFlow.js

TensorFlow.js podpira dva API-ja za gradnjo modelov nevronskih mrež. Eden je API Layers, ki je v bistvu enak API-ju Keras v TensorFlow 2. Drugi je Core API, ki je v bistvu neposredna manipulacija tenzorjev.

Tako kot Keras ima tudi TensorFlow.js Layers API dva načina za ustvarjanje modela: zaporedni in funkcionalni. Zaporedni API je linearni sklad slojev, ki se izvaja s seznamom slojev (kot je prikazano spodaj) ali z model.add () metoda:

const model = tf.sequential ({

plasti: [

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

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

 ]

});

Funkcionalni API uporablja tf.model () API in lahko ustvarja poljubna omrežja DAG (usmerjeni aciklični graf):

// Ustvarimo poljuben graf slojev, tako da jih povežemo

// prek metode apply ().

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

const gosto1 = tf.layers.dense ({enot: 32, aktivacija: 'relu'}). velja (vnos);

const gosto2 = tf.layers.dense ({enot: 10, aktivacija: 'softmax'}). velja (gosto1);

const model = tf.model ({vhodi: vhod, izhodi: gosti2});

Core API lahko doseže enake cilje z različno kodo in manj intuitivno vezano na sloje. Spodnji model je morda videti kot osnovna tenzorska operacija, vendar ustvarja enako mrežo kot prejšnji formulaciji. Upoštevajte uporabo relu () in softmax (), ki sta obe operaciji nevronske mreže, v model () spodaj.

// Uteži in pristranskosti za dve gosti plasti.

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

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

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

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

model funkcije (x) {

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

}

Vnaprej izdelani modeli TensorFlow.js

Obstaja več kot ducat vnaprej izdelanih modelov TensorFlow.js, ki so dokumentirani, na voljo v repozitoriju in gostujejo na NPM (za uporabo v Node.js) in unpkg (za uporabo v brskalniku). Te modele lahko uporabite kot priložene ali za učenje s prenosom. Z malo dela jih lahko uporabite tudi kot gradnike za druge modele.

Več teh modelov uporablja kamero naprave v realnem času, na primer ročno:

Spodnji seznam je priročen indeks večine predpakiranih modelov TensorFlow.js.

  • Razvrstitev slik
  • Zaznavanje predmetov
  • Segmentacija telesa
  • Ocena poze
  • Zaznavanje strupenosti besedila
  • Univerzalni kodirnik stavkov
  • Prepoznavanje ukaza govora
  • KNN klasifikator
  • Preprosto zaznavanje obrazov
  • Semantična segmentacija
  • Zaznavanje mejnika obraza
  • Zaznavanje poze roke
  • Odgovor na vprašanje v naravnem jeziku

Kaj je ml5.js?

ml5.js je odprtokoden, prijazen vmesnik na visoki ravni za TensorFlow.js, razvit predvsem v New Yorku. ml5.js v brskalniku omogoča takojšen dostop do predhodno usposobljenih modelov za zaznavanje človeških poz, ustvarjanje besedila, oblikovanje slike z drugo, sestavljanje glasbe, zaznavanje tona, pogosta razmerja besed v angleškem jeziku in še veliko več. Medtem ko je TensorFlow.js namenjen predvsem znanstvenikom in razvijalcem podatkov, želi ml5.js podpreti širše razumevanje strojnega učenja v javnosti in spodbuditi globlje sodelovanje z etičnim računalništvom, odgovornim zbiranjem podatkov ter dostopnostjo in raznolikostjo ljudi in perspektiv v tehnologiji in umetnosti .

Večina primerov v ml5.js je odvisna od modelov TensorFlow.js. Pakirane so kot spletne strani, ki jih lahko zaženete takšne, kot so, ali jih urejate, na primer za uporabo različnih slik.

Predstavitev: Razvrstitev šarenice s TensorFlow.js

Znani nabor podatkov o diskriminaciji Iris, ki ga je ustvaril R.A. Fisher leta 1936 za ponazoritev linearne diskriminatorne analize se še vedno uporablja kot test za statistične metode in metode klasifikacije strojnega učenja. Za razvrstitev treh vrst perunike uporablja 50 značilnosti, dolžino in širino cvetnih lističev in cvetnih listov, s po 50 vzorci vsake vrste. (Fisherjev izvirni članek je bil objavljen v Anali evgenike, ki o znanosti leta 1936 pove več kot o podatkih ali statistiki.)

Če na teh podatkih izvedete analizo grozdov, si bosta dve vrsti delili eno skupino, tretja (I. Setosa) pa v ločeni gruči. Po drugi strani pa lahko analiza glavnih komponent dokaj dobro loči vse tri vrste.

Vzorec TensorFlow.js ustreza podatkom Iris z dvema popolnoma povezanima (gostima) plastema nevronske mreže, kot je prikazano v spodnjem izvlečku kode.

// Določimo topologijo modela: dve gosti plasti.

const model = tf.sequential ();

model.add (tf.layers.dense (

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

));

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

model.summary ();

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

model.compile ({

optimizer: optimizer,

izguba: 'categoricalCrossentropy',

metrike: ['natančnost'],

});

Kot lahko vidite na spodnjem posnetku zaslona, ​​ta model spodobno razvršča tri vrste. Če se poigrate s parametri, pa boste odkrili, da se med dvema vrstama (tistima v isti kopici) spet pojavi zmeda, če ponavljate več kot 40 obdobij.

Pretvorba modelov Python TensorFlow v JavaScript

Del repozitorija TensorFlow.js vsebuje pretvornik za shranjene modele TensorFlow in Keras. Podpira tri formate: SavedModel (privzeto za TensorFlow), HDF5 (privzeto za Keras) in TensorFlow Hub. Pretvornik lahko uporabite za shranjene modele iz standardnih skladišč, modele, ki ste jih sami usposobili, in modele, ki ste jih našli drugje.

Za pretvorbo sta dejansko dva koraka. Prvi korak je pretvorba obstoječega modela v datoteke model.json in binarne teže. Drugi korak je uporaba API-ja za nalaganje modela v TensorFlow.js tf.loadGraphModel za pretvorjena modela TensorFlow in TensorFlow Hub, ali tf.loadLayersModel za pretvorjene modele Keras.

Uporaba učenja s prenosom

TensorFlow.js podpira učenje prenosov v bistvu na enak način kot TensorFlow. V dokumentaciji so primeri za prilagajanje MobileNeta za vaše slike in prilagajanje modela za prepoznavanje govornih ukazov za vaše lastne zvočne razrede. V bistvu to, kar počnete v vsaki od teh kodnih laboratorijev, je dodajanje majhnega klasifikatorja po meri na vrhu izurjenega modela in njegovo usposabljanje.

Na splošno lahko TensorFlow.js naredi skoraj vse, kar lahko naredi TensorFlow. Glede na to, da imajo ciljna okolja za TensorFlow.js (vrtni grafični procesorji za igre na srečo) običajno manj pomnilnika GPU kot veliki GPU strežnika Nvidia, ki se običajno uporabljajo za globoko učenje TensorFlow, boste morda morali zmanjšati velikost model, da deluje v brskalniku. Pripomoček za pretvorbo naredi nekaj od tega namesto vas, vendar boste morda morali ročno odstraniti sloje in zmanjšati velikost serij za vaše usposabljanje.

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