Programmēšana

Kā pārlūkprogrammā izmantot TensorFlow

Lai gan ar TensorFlow jūs varat apmācīt vienkāršus neironu tīklus ar salīdzinoši nelielu treniņu datu daudzumu, dziļajiem neironu tīkliem ar lielām apmācību datu kopām paātrināšanai patiešām jāizmanto ar CUDA spējīgi Nvidia GPU vai Google TPU vai FPGA. Vēl nesen alternatīva ir bijusi apmācība CPU kopās nedēļām ilgi.

Viens no jaunumiem, kas ieviests ar TensorFlow 2.0, ir JavaScript ieviešana TensorFlow.js. Es nebūtu gaidījis, ka tas uzlabos apmācību vai secināšanas ātrumu, taču tas notiek, ņemot vērā atbalstu visiem GPU (ne tikai ar CUDA spējīgiem GPU), izmantojot WebGL API.

[Arī par: TensorFlow 2.0 pārskats: vienkāršāka mašīnmācīšanās]

Kas ir TensorFlow.js?

TensorFlow.js ir bibliotēka mašīnmācīšanās modeļu izstrādei un apmācībai JavaScript, kā arī to izvietošanai pārlūkprogrammā vai vietnē Node.js. Varat izmantot esošos modeļus, pārveidot Python TensorFlow modeļus, izmantot pārsūtīšanas apmācību, lai esošos modeļus pārkvalificētu ar saviem datiem, un izstrādāt modeļus no jauna.

TensorFlow.js aizmugure

TensorFlow.js atbalsta izpildei vairākus aizmugures galus, lai gan vienlaikus var būt aktīvs tikai viens. TensorFlow.js Node.js vide atbalsta instalēta Python / C TensorFlow būvējuma izmantošanu kā aizmuguri, kas savukārt var izmantot mašīnas pieejamo aparatūras paātrinājumu, piemēram, CUDA. Vietnei Node.js ir arī JavaScript balstīta aizmugure, taču tā iespējas ir ierobežotas.

Pārlūkprogrammā TensorFlow.js ir vairākas aizmugures ar atšķirīgām īpašībām. WebGL aizmugure nodrošina GPU atbalstu, izmantojot WebGL faktūras glabāšanai un WebGL ēnotājus izpildei, un tā var būt līdz pat 100x ātrāka nekā vienkāršā CPU aizmugure. WebGL nav nepieciešama CUDA, tāpēc tā var izmantot visas esošās GPU priekšrocības.

Pārlūkprogrammas WebAssembly (WASM) TensorFlow.js aizmugurējā daļa neironu tīkla operatoru optimizētai CPU ieviešanai izmanto bibliotēku XNNPACK. WASM aizmugure parasti ir daudz ātrāka (no 10x līdz 30x) nekā JavaScript CPU aizmugure, taču parasti tā ir lēnāka nekā WebGL aizmugure, izņemot ļoti mazus modeļus. Jūsu nobraukums var atšķirties, tāpēc pārbaudiet gan WASM, gan WebGL aizmuguri saviem modeļiem, izmantojot savu aparatūru.

TensorFlow.js modeļi un slāņi

TensorFlow.js atbalsta divus API neironu tīkla modeļu veidošanai. Viens ir Layers API, kas būtībā ir tāds pats kā Keras API TensorFlow 2. Otrais ir Core API, kas būtībā ir tieša manipulācija ar tenoriem.

Tāpat kā Keras, arī TensorFlow.js Layers API ir divi modeļa izveides veidi: secīgs un funkcionāls. Secīgā API ir lineāra slāņu kaudze, kas ieviesta ar slāņu sarakstu (kā parādīts zemāk) vai ar model.add () metode:

const modelis = tf.sequential ({

slāņi: [

tf.layers.dense ({inputShape: [784], vienības: 32, aktivizēšana: 'relu'}),

tf.layers.dense ({vienības: 10, aktivizēšana: 'softmax'}),

 ]

});

Funkcionālā API izmanto tf.model () API un var izveidot patvaļīgus DAG (virzītu aciklisko diagrammu) tīklus:

// Izveidojiet patvaļīgu slāņu grafiku, tos savienojot

// izmantojot Apply () metodi.

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

const dense1 = tf.layers.dense ({vienības: 32, aktivizēšana: 'relu'}). piemērot (ievade);

const dense2 = tf.layers.dense ({vienības: 10, aktivizēšana: 'softmax'}). piemērot (blīvs1);

const modelis = tf.model ({ievades: ievade, izejas: blīvs2});

Core API var sasniegt tos pašus mērķus, izmantojot atšķirīgu kodu un mazāk intuitīvu saikni ar slāņiem. Tālāk redzamais modelis var izskatīties pēc pamata tenzora operācijām, taču tas rada tādu pašu tīklu kā divi iepriekšējie formulējumi. Ievērojiet relu () un softmax (), kas abas ir neironu tīkla darbības, modelis () funkciju zemāk.

// Svari un novirzes diviem blīviem slāņiem.

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

funkciju modelis (x) {

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

}

Iepriekš izveidoti TensorFlow.js modeļi

Ir vairāk nekā ducis iepriekš izveidotu TensorFlow.js modeļu, kas ir dokumentēti, pieejami krātuvē un mitināti NPM (lietošanai Node.js) un unpkg (lietošanai pārlūkprogrammā). Šos modeļus varat izmantot kā komplektācijā iekļautos vai mācīties tālāk. Ar nelielu darbu jūs varat tos izmantot arī kā celtniecības elementus citiem modeļiem.

Vairāki no šiem modeļiem reāllaikā izmanto ierīces kameru, piemēram, izmanto:

Zemāk esošais saraksts ir ērts rādītājs lielākajai daļai fasēto TensorFlow.js modeļu.

  • Attēlu klasifikācija
  • Objekta noteikšana
  • Ķermeņa segmentēšana
  • Pozu novērtēšana
  • Teksta toksicitātes noteikšana
  • Universāls teikumu kodētājs
  • Runas komandu atpazīšana
  • KNN klasifikators
  • Vienkārša sejas noteikšana
  • Semantiskā segmentēšana
  • Sejas orientieru noteikšana
  • Roku pozu noteikšana
  • Atbilde uz dabiskās valodas jautājumu

Kas ir ml5.js?

ml5.js ir atvērtā koda, draudzīga, augsta līmeņa saskarne ar TensorFlow.js, kas galvenokārt izstrādāta NYU. ml5.js nodrošina tūlītēju piekļuvi pārlūkprogrammā iepriekš apmācītiem modeļiem cilvēku pozu noteikšanai, teksta ģenerēšanai, attēla noformēšanai ar citu, mūzikas komponēšanai, piķa noteikšanai, kopīgām angļu valodas vārdu attiecībām un daudz ko citu. Kamēr TensorFlow.js galvenokārt ir domāts datu zinātniekiem un izstrādātājiem, ml5.js mērķis ir atbalstīt plašāku sabiedrības izpratni par mašīnmācīšanos un veicināt dziļāku iesaistīšanos ētiskajā skaitļošanā, atbildīgu datu vākšanu, kā arī cilvēku un tehnoloģiju un mākslas perspektīvu pieejamību un daudzveidību .

Lielākā daļa piemēru ml5.js ir atkarīgi no TensorFlow.js modeļiem. Tie ir iepakoti kā tīmekļa lapas, kuras varat palaist tādas, kādas tās ir, vai rediģēt, piemēram, lai izmantotu dažādus attēlus.

Demonstrācija: Iris klasifikācija ar TensorFlow.js

Slavenā Iris diskriminācijas datu kopa, kuru radījis R.A. Fišers 1936. gadā, lai ilustrētu lineāru diskriminantu analīzi, joprojām tiek izmantots kā statistikas un mašīnmācīšanās klasifikācijas metožu testa gadījums. Lai klasificētu trīs īrisu sugas, izmantojot 50 katras sugas paraugus, tiek izmantotas četras pazīmes, ziedu sīpolu un ziedlapu garums un platums. (Fišera oriģināldarbs tika publicēts Eugēnikas gadagrāmatas, kas par zinātni 1936. gadā saka vairāk nekā par datiem vai statistiku.)

Ja šiem datiem veicat klasteru analīzi, divām sugām būs kopīga viena kopa, bet trešajai (I. Setosa) - atsevišķā klasterī. No otras puses, galvenā komponenta analīze var diezgan labi nošķirt visas trīs sugas.

TensorFlow.js paraugs iekļauj Iris datus ar diviem pilnībā savienotiem (blīviem) neironu tīkla slāņiem, kā parādīts zemāk esošajā koda izrakstā.

// Definējiet modeļa topoloģiju: divi blīvi slāņi.

konst modelis = tf.stevens ();

model.add (tf.layers.dense (

{vienības: 10, aktivizācija: 'sigmoid', inputShape: [xTrain.shape [1]]}

));

model.add (tf.layers.dense ({vienības: 3, aktivizēšana: 'softmax'}));

modelis.kopsavilkums ();

const optimizētājs = tf.train.adam (params.learningRate);

model.compile ({

optimizētājs: optimizētājs,

zaudējums: 'categoryoricalCrossentropy',

metrika: ['precizitāte'],

});

Kā redzat zemāk redzamajā ekrānuzņēmumā, šis modelis veic pienācīgu darbu, klasificējot trīs sugas. Tomēr, spēlējoties ar parametriem, jūs atklāsiet, ka, ja atkārtojat vairāk nekā 40 laikmetus, atkal rodas zināma neskaidrība starp divām sugām (tām, kas atrodas vienā klasterī).

Python TensorFlow modeļu konvertēšana uz JavaScript

Daļa no TensorFlow.js repozitorija satur pārveidotāju saglabātajiem TensorFlow un Keras modeļiem. Tas atbalsta trīs formātus: SavedModel (TensorFlow noklusējums), HDF5 (Keras noklusējums) un TensorFlow Hub. Pārveidotāju varat izmantot, lai saglabātu modeļus no standarta krātuvēm, modeļiem, kurus esat apmācījis pats, un modeļiem, kurus esat atradis citur.

Pārveidošanai faktiski ir divas darbības. Pirmais solis ir pārveidot esošo modeli par model.json un binārā svara failiem. Otrais solis ir izmantot API, lai ielādētu modeli vietnē TensorFlow.js tf.loadGraphModel pārveidotiem TensorFlow un TensorFlow Hub modeļiem vai tf.loadLayersModel pārveidotiem Keras modeļiem.

Pārneses mācīšanās izmantošana

TensorFlow.js atbalsta pārsūtīšanas mācības būtībā tāpat kā TensorFlow. Dokumentācijā ir piemēri MobileNet pielāgošanai saviem attēliem un runas komandu atpazīšanas modeļa pielāgošanai savām skaņu klasēm. Būtībā tas, ko jūs darāt katrā no šiem kodelaboratoriem, ir apmācītajam modelim virsū pievienot nelielu pielāgotu klasifikatoru un to apmācīt.

Kopumā TensorFlow.js var darīt gandrīz visu, ko TensorFlow. Tomēr, ņemot vērā to, ka TensorFlow.js mērķa vidē (spēļu dārza šķirnes GPU) GPU atmiņa parasti ir mazāka nekā lielajiem Nvidia servera GPU, kurus parasti izmanto TensorFlow dziļo mācību apmācībai, iespējams, būs jāsamazina modeli, lai tas darbotos pārlūkprogrammā. Konvertēšanas lietderība daļu no tā veic jūsu vietā, taču, iespējams, jums būs manuāli jāizņem slāņi un jāsamazina apmācības partiju lielumi.

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