Programovanie

Ako používať TensorFlow vo vašom prehliadači

Aj keď pomocou TensorFlow môžete trénovať jednoduché neurónové siete s relatívne malým množstvom tréningových dát, pre hlboké neurónové siete s veľkými súbormi tréningových dát musíte skutočne potrebovať na akceleráciu GPU Nvidia podporujúce CUDA alebo Google TPU alebo FPGA. Alternatívou bolo až donedávna niekoľko týždňov trénovanie na klastroch CPU.

Jednou z noviniek zavedených v TensorFlow 2.0 je implementácia JavaScriptu TensorFlow.js. Neočakával by som, že to zlepší tréning alebo odvodí rýchlosť, ale je to tak vzhľadom na jeho podporu všetkých GPU (nielen GPU s podporou CUDA) cez WebGL API.

[Tiež k: Recenzia TensorFlow 2.0: Jednoduchšie strojové učenie]

Čo je TensorFlow.js?

TensorFlow.js je knižnica na vývoj a výcvik modelov strojového učenia v JavaScripte a ich nasadenie v prehliadači alebo na serveri Node.js. Môžete použiť existujúce modely, prevádzať modely Python TensorFlow, pomocou prenosového učenia preškoliť existujúce modely pomocou vlastných údajov a vyvíjať modely úplne od začiatku.

Zadné konce súboru TensorFlow.js

TensorFlow.js podporuje viac backendov na vykonanie, hoci aktívny môže byť súčasne iba jeden. Prostredie TensorFlow.js Node.js podporuje použitie nainštalovaného zostavenia Python / C TensorFlow ako koncového zariadenia, ktoré môže zase využívať dostupné hardvérové ​​zrýchlenie stroja, napríklad CUDA. Pre Node.js existuje aj back-end založený na JavaScripte, ale jeho možnosti sú obmedzené.

V prehliadači má súbor TensorFlow.js niekoľko koncových zariadení s rôznymi vlastnosťami. Zadný koniec WebGL poskytuje podporu GPU pomocou textúr WebGL na ukladanie a shaderov WebGL na vykonávanie a môže byť až 100-krát rýchlejší ako obyčajný zadný koniec procesora. WebGL nevyžaduje CUDA, takže môže využívať výhody ľubovoľného prítomného GPU.

Zadný koniec TensorFlow.js WebAssembly (WASM) pre prehliadač používa knižnicu XNNPACK na optimalizovanú implementáciu CPU operátorov neurónových sietí. Zadný koniec WASM je všeobecne oveľa rýchlejší (10x až 30x) ako back-endový procesor JavaScriptu, ale okrem veľmi malých modelov je zvyčajne pomalší ako zadný koniec WebGL. Váš počet najazdených kilometrov sa môže líšiť, takže na svojich vlastných modeloch na vlastnom hardvéri otestujte zadné konce serverov WASM aj WebGL.

Modely a vrstvy TensorFlow.js

TensorFlow.js podporuje dve API pre vytváranie modelov neurónových sietí. Jedným je Layers API, ktoré je v podstate rovnaké ako Keras API v TensorFlow 2. Druhým je Core API, čo je v podstate priama manipulácia s tenzormi.

Rovnako ako Keras, aj rozhranie TensorFlow.js Layers API má dva spôsoby, ako vytvoriť model: postupný a funkčný. Sekvenčné API je lineárny stoh vrstiev, implementovaný so zoznamom vrstiev (ako je zobrazené nižšie) alebo s model.add () metóda:

konštantný model = tf.sequential ({

vrstvy: [

tf.layers.dense ({inputShape: [784], jednotky: 32, aktivácia: 'relu'}),

tf.layers.dense ({jednotky: 10, aktivácia: 'softmax'}),

 ]

});

Funkčné API používa tf.model () API a môže vytvárať ľubovoľné siete DAG (smerovaný acyklický graf):

// Vytvorte ľubovoľný graf vrstiev ich spojením

// pomocou metódy apply ().

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

const hustá1 = tf.layers.dense ({jednotky: 32, aktivácia: 'relu'}). apply (vstup);

const hustá2 = tf.layers.dense ({jednotky: 10, aktivácia: 'softmax'}). apply (hustá1);

const model = tf.model ({vstupy: vstup, výstupy: thick2});

Core API môže dosiahnuť rovnaké ciele, s iným kódom a menšou intuitívnou väzbou na vrstvy. Model uvedený nižšie môže vyzerať ako základné tenzorové operácie, ale vytvára rovnakú sieť ako dve predchádzajúce formulácie. Všimnite si použitie relu () a softmax (), ktoré sú obidvomi operáciami neurónových sietí v Model() funkcia dole.

// Váhy a predpätia pre dve husté vrstvy.

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]));

funkčný model (x) {

návrat x.matMul (w1) .add (b1) .relu (). matMul (w2) .add (b2) .softmax ();

}

Vopred vyrobené modely TensorFlow.js

Existuje viac ako tucet vopred pripravených modelov TensorFlow.js zdokumentovaných, dostupných v úložisku a hostených v NPM (na použitie v Node.js) a unbkg (na použitie v prehliadači). Môžete použiť tieto modely ako sú dodávané alebo na prenos učenia. Pri troche práce ich môžete použiť aj ako stavebné kamene pre ďalšie modely.

Niektoré z týchto modelov používajú fotoaparát zariadenia v reálnom čase, napríklad na účel:

Zoznam uvedený nižšie je pohodlným indexom väčšiny predbalených modelov TensorFlow.js.

  • Klasifikácia obrázkov
  • Detekcia objektu
  • Segmentácia tela
  • Odhad pozície
  • Detekcia textovej toxicity
  • Univerzálny kódovač viet
  • Rozpoznávanie rečových príkazov
  • KNN klasifikátor
  • Jednoduchá detekcia tváre
  • Sémantická segmentácia
  • Detekcia orientačného bodu tváre
  • Detekcia pózu ruky
  • Zodpovedanie otázok prirodzeným jazykom

Čo je ml5.js?

ml5.js je priateľské rozhranie na vysokej úrovni s otvoreným zdrojom pre TensorFlow.js vyvinuté primárne na NYU. ml5.js poskytuje v prehliadači okamžitý prístup k vopred vyškoleným modelom na zisťovanie ľudských pozícií, generovanie textu, vytváranie štýlov obrázka s iným, komponovanie hudby, detekciu výšky tónu, bežné vzťahy v anglickom jazyku a ďalšie. Zatiaľ čo súbor TensorFlow.js je zameraný predovšetkým na vedcov a vývojárov v oblasti údajov, cieľom ml5.js je podporovať širšie chápanie strojového učenia verejnosťou a podporovať hlbšie zapojenie do etického počítania, zodpovedného zberu údajov a dostupnosti a rozmanitosti ľudí a perspektív v oblasti technológií a umenia. .

Väčšina príkladov v ml5.js závisí od modelov TensorFlow.js. Boli zabalené ako webové stránky, ktoré môžete spúšťať tak, ako sú, alebo ich môžete upravovať, napríklad aby ste mohli používať rôzne obrázky.

Ukážka: Irisová klasifikácia pomocou TensorFlow.js

Slávny súbor údajov o diskriminácii na základe dúhovky, ktorý vytvoril R.A. Fisher v roku 1936 na ilustráciu lineárnej diskriminačnej analýzy sa stále používa ako testovací prípad pre štatistické metódy a metódy klasifikácie strojového učenia. Využíva štyri vlastnosti, dĺžku a šírku kvetných sepálov a okvetných lístkov, na klasifikáciu troch druhov kosatca s 50 vzorkami od každého druhu. (Fisherov pôvodný dokument bol publikovaný v Annals of Eugenics, ktorá hovorí viac o vede v roku 1936 ako o dátach alebo štatistikách.)

Ak na základe týchto údajov vykonáte zhlukovú analýzu, dva z druhov budú zdieľať jeden zhluk, s tretím (I. Setosa) v samostatnom zhluku. Na druhej strane, analýza hlavných zložiek dokáže celkom dobre oddeliť všetky tri druhy.

Ukážka TensorFlow.js zapadá do údajov Iris s dvoma úplne spojenými (hustými) vrstvami neurónovej siete, ako je uvedené v extrakte kódu nižšie.

// Definujte topológiu modelu: dve husté vrstvy.

konštantný model = tf.sequential ();

model.add (tf.layers.dense (

{jednotky: 10, aktivácia: 'sigmoid', inputShape: [xTrain.shape [1]]}

));

model.add (tf.layers.dense ({jednotky: 3, aktivácia: 'softmax'})));

model.summary ();

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

model.compile ({

optimalizátor: optimalizátor,

strata: 'categoricalCrossentropy',

metriky: ['presnosť'],

});

Ako môžete vidieť na snímke obrazovky nižšie, tento model robí slušnú prácu pri klasifikácii týchto troch druhov. Ak sa však pohráte s parametrami, zistíte, že pri iterácii viac ako 40 epoch sa znova objaví nejaký zmätok medzi dvoma druhmi (druhmi v rovnakom klastri).

Konverzia modelov Python TensorFlow na JavaScript

Časť úložiska TensorFlow.js obsahuje prevodník pre uložené modely TensorFlow a Keras. Podporuje tri formáty: SavedModel (predvolený pre TensorFlow), HDF5 (predvolený pre Keras) a TensorFlow Hub. Prevodník môžete použiť na uložené modely zo štandardných úložísk, modely, ktoré ste sami trénovali, a modely, ktoré ste našli inde.

V skutočnosti existujú dva kroky k premene. Prvým krokom je konverzia existujúceho modelu na model.json a súbory binárnej hmotnosti. Druhým krokom je použitie API na načítanie modelu do súboru TensorFlow.js tf.loadGraphModel pre prevedené modely TensorFlow a TensorFlow Hub alebo tf.loadLayersModel pre prevedené modely Keras.

Pomocou prenosového učenia

TensorFlow.js podporuje prenosové učenie v podstate rovnakým spôsobom ako TensorFlow. Dokumentácia poskytuje príklady prispôsobenia protokolu MobileNet pre vaše vlastné obrázky a prispôsobenia modelu rozpoznávania rečových príkazov pre vaše vlastné zvukové triedy. V podstate to, čo robíte v každom z týchto kodekov, je pridanie malého vlastného klasifikátora nad trénovaný model a jeho školenie.

Celkovo TensorFlow.js dokáže takmer všetko, čo dokáže TensorFlow. Avšak vzhľadom na to, že cieľové prostredia pre TensorFlow.js (záhradné odrody GPU pre hry) majú zvyčajne menej v spôsobe pamäte GPU ako veľké GPU servera Nvidia, ktoré sa zvyčajne používajú na školenie hlbokého učenia TensorFlow, možno budete musieť zmenšiť veľkosť svojho model, aby bol spustený v prehliadači. Pomôcka na konverziu robí niečo z toho za vás, ale možno budete musieť vrstvy vyberať ručne a zmenšiť veľkosť dávky pre svoj tréning.

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