Ohjelmointi

Kuinka käyttää TensorFlow-selainta

Vaikka voit kouluttaa yksinkertaisia ​​hermoverkkoja suhteellisen pienillä määrillä harjoitustietoja TensorFlow'lla, syvien hermoverkkojen kanssa, joissa on suuret harjoitustietojoukot, sinun on todella käytettävä kiihdytykseen CUDA-yhteensopivia Nvidia-näytönohjaimia tai Google TPU: ta tai FPGA: ta. Vaihtoehto on viime aikoihin asti ollut kouluttaa suorittimien klustereita viikkoja.

Yksi TensorFlow 2.0: n kanssa käyttöönotetuista innovaatioista on JavaScript-toteutus, TensorFlow.js. En olisi odottanut, että se parantaa harjoittelua tai päättelynopeutta, mutta se tapahtuu, kun otetaan huomioon tuki kaikille GPU: ille (ei vain CUDA-yhteensopiville GPU: lle) WebGL-sovellusliittymän kautta.

[Myös: TensorFlow 2.0 -katsaus: Helpompaa koneoppimista]

Mikä on TensorFlow.js?

TensorFlow.js on kirjasto koneoppimismallien kehittämiseen ja kouluttamiseen JavaScriptiin ja niiden asentamiseen selaimessa tai Node.js: ssä. Voit käyttää olemassa olevia malleja, muuntaa Python TensorFlow -malleja, käyttää siirto-oppimista nykyisten mallien uudelleenkoulutukseen omilla tiedoillasi ja kehittää malleja alusta alkaen.

TensorFlow.js takana

TensorFlow.js tukee useita taustoja suoritusta varten, vaikka vain yksi voi olla aktiivinen kerrallaan. TensorFlow.js Node.js -ympäristö tukee asennettujen Python / C TensorFlow -rakennusten käyttöä taustana, mikä puolestaan ​​voi käyttää koneen käytettävissä olevaa laitteistokiihdytystä, esimerkiksi CUDA. Node.js: lle on myös JavaScript-pohjainen takapää, mutta sen ominaisuudet ovat rajalliset.

Selaimessa TensorFlow.js: llä on useita taustoja, joilla on erilaiset ominaisuudet. WebGL-takapää tarjoaa GPU-tuen, jossa käytetään WebGL-pintakuvioita tallennukseen ja WebGL-varjostimia suoritukseen, ja se voi olla jopa 100 kertaa nopeampi kuin tavallinen suorittimen takapää. WebGL ei vaadi CUDA: ta, joten se voi hyödyntää mitä tahansa GPU: ta.

Selaimen WebAssembly (WASM) TensorFlow.js -käyttöjärjestelmä käyttää XNNPACK-kirjastoa hermoverkko-operaattoreiden optimoituun suorittimen toteuttamiseen. WASM-takapää on yleensä paljon nopeampi (10x - 30x) kuin JavaScript-suorittimen takapää, mutta on yleensä hitaampaa kuin WebGL-takapää lukuun ottamatta hyvin pieniä malleja. Mittarilukema voi vaihdella, joten testaa sekä WASM- että WebGL-takapäät omille malleillesi omalla laitteellasi.

TensorFlow.js-mallit ja -kerrokset

TensorFlow.js tukee kahta sovellusliittymää hermoverkkomallien rakentamiseen. Yksi on Layers-sovellusliittymä, joka on olennaisesti sama kuin TensorFlow 2: n Keras-sovellusliittymä. Toinen on Core-sovellusliittymä, joka on olennaisesti suoraan tensoreiden suoraa manipulointia.

Kuten Keras, TensorFlow.js Layers -sovellusliittymällä on kaksi tapaa luoda malli: peräkkäinen ja toimiva. Peräkkäinen API on lineaarinen pino kerroksia, toteutettu tasoluettelolla (kuten alla on esitetty) tai malli.add () menetelmä:

const malli = tf.sequential ({

kerrokset: [

tf.layers.dense ({inputShape: [784], yksiköt: 32, aktivointi: 'relu'}),

tf.layers.dense ({yksiköt: 10, aktivointi: 'softmax'}),

 ]

});

Toiminnallinen sovellusliittymä käyttää tf.model () API ja voi luoda mielivaltaisia ​​DAG (suunnattu asyklinen kaavio) -verkkoja:

// Luo mielivaltainen kaavio tasoista yhdistämällä ne

// sovelluksen () menetelmällä.

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

const tiheä1 = tf.layers.dense ({yksiköt: 32, aktivointi: 'relu'}). soveltaa (tulo);

const tiheä2 = tf.layers.dense ({yksiköt: 10, aktivointi: 'softmax'}). soveltaa (tiheä1);

const malli = tf.model ({tulot: tulo, lähdöt: tiheä2});

Core-sovellusliittymä voi saavuttaa samat tavoitteet, erilaisella koodilla ja vähemmän intuitiivisella sidoksella tasoihin. Alla oleva malli saattaa näyttää tensorin perustoiminnoilta, mutta se luo saman verkon kuin kaksi edellistä formulaatiota. Huomaa relu () ja softmax (), jotka ovat molemmat hermoverkkotoimintoja, malli() alla.

// Kahden tiheän kerroksen painot ja esijännitykset.

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

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

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

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

toimintomalli (x) {

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

}

Valmiit TensorFlow.js-mallit

Yli tusina valmiiksi rakennettuja TensorFlow.js-malleja on dokumentoitu, saatavilla arkistossa ja isännöity NPM: ssä (käytettäväksi Node.js: ssä) ja unpkg: ssä (käytettäväksi selaimessa). Voit käyttää näitä malleja mukana toimitettuna tai oppimiseen. Pienellä työllä voit käyttää niitä myös rakennuspalikoina muihin malleihin.

Useat näistä malleista käyttävät laitteen kameraa reaaliajassa, esimerkiksi käsittelevät:

Alla oleva luettelo on kätevä hakemisto useimpiin valmiiksi pakatuista TensorFlow.js-malleista.

  • Kuvaluokitus
  • Kohteen tunnistus
  • Rungon segmentointi
  • Pose estimointi
  • Tekstimyrkyllisyyden havaitseminen
  • Yleinen lauseenkooderi
  • Puhekomennon tunnistus
  • KNN-luokittelija
  • Yksinkertainen kasvojentunnistus
  • Semanttinen segmentointi
  • Kasvomerkkien tunnistus
  • Käsi-asennon tunnistus
  • Luonnollisen kielen kysymykseen vastaaminen

Mikä on ml5.js?

ml5.js on avoimen lähdekoodin, ystävällinen ja korkean tason käyttöliittymä TensorFlow.js: lle, joka on kehitetty ensisijaisesti NYU: ssa. ml5.js tarjoaa välittömän pääsyn selaimessa ennalta koulutettuihin malleihin ihmisasennojen havaitsemiseksi, tekstin luomiseksi, kuvan muotoilemiseksi toisella, musiikin säveltämiselle, äänenvoimakkuuden tunnistukselle, englanninkielisillä sanasuhteilla ja paljon muuta. Vaikka TensorFlow.js on suunnattu ensisijaisesti datatieteilijöille ja kehittäjille, ml5.js pyrkii tukemaan yleisön laajempaa ymmärrystä koneoppimisesta ja edistämään syvempää sitoutumista eettiseen tietojenkäsittelyyn, vastuulliseen tiedonkeruun sekä ihmisten ja tekniikan ja taiteen näkökulmien saatavuuteen ja monimuotoisuuteen. .

Suurin osa ml5.js: n esimerkeistä riippuu TensorFlow.js-malleista. Ne on pakattu verkkosivuiksi, joita voit käyttää sellaisenaan, tai muokata esimerkiksi käyttääksesi erilaisia ​​kuvia.

Demo: Iris-luokitus TensorFlow.js: n kanssa

Kuuluisa Iris-syrjintätietojoukko, jonka on lähettänyt R.A. Fisheria vuonna 1936 lineaarisen erotteluanalyysin havainnollistamiseksi käytetään edelleen testitapauksena tilastollisten ja koneoppimisen luokitusmenetelmissä. Se käyttää neljää ominaisuutta, kukka- ja terälehtien pituutta ja leveyttä kolmen Iris-lajin luokittelemiseen, joista 50 on näytteitä jokaisesta lajista. (Fisherin alkuperäinen paperi julkaistiin Eugeniikan vuosikirjat, joka kertoo enemmän tieteestä vuonna 1936 kuin tiedoista tai tilastoista.)

Jos teet klusterianalyysin näille tiedoille, kaksi lajista jakaa yhden klusterin, kolmas (I. Setosa) erillisessä klusterissa. Toisaalta pääkomponenttianalyysi voi erottaa kaikki kolme lajia melko hyvin.

TensorFlow.js-näyte sopii Iris-tietoihin kahdella täysin liitetyllä (tiheällä) hermoverkkokerroksella, kuten alla olevasta koodipurista näkyy.

// Määritä mallin topologia: kaksi tiheää kerrosta.

const-malli = tf.vastaava ();

model.add (tf.layers.dense (

{yksiköt: 10, aktivointi: 'sigmoid', inputShape: [xTrain.shape [1]]}

));

model.add (tf.layers.dense ({yksiköt: 3, aktivointi: 'softmax'}));

malli.yhteenveto ();

const-optimoija = tf.train.adam (params.learningRate);

model.compile ({

optimoija: optimoija,

menetys: 'categoryoricalCrossentropy',

mittarit: ['tarkkuus'],

});

Kuten alla olevasta kuvakaappauksesta näet, tämä malli tekee kunnollisen työn kolmen lajin luokittelussa. Jos pelaat parametreilla, huomaat kuitenkin, että kahden lajin (samaan klusteriin kuuluvien) välillä esiintyy sekaannusta, jos toistat yli 40 aikakautta.

Python TensorFlow -mallien muuntaminen JavaScriptiksi

Osa TensorFlow.js-arkistosta sisältää muuntimen tallennetuille TensorFlow- ja Keras-malleille. Se tukee kolmea muotoa: SavedModel (oletus TensorFlow), HDF5 (oletus Kerasille) ja TensorFlow Hub. Voit käyttää muunninta tallennettujen mallien tallentamiseen vakiomuotoisista arkistoista, itse kouluttamistasi malleista ja muualta löydetyistä malleista.

Muuntamiseen on oikeastaan ​​kaksi vaihetta. Ensimmäinen vaihe on muuntaa nykyinen malli model.json- ja binaaripainotiedostoiksi. Toinen vaihe on käyttää sovellusliittymää mallin lataamiseen joko TensorFlow.js-tiedostoon tf.loadGraphModel muunnetuille TensorFlow- ja TensorFlow Hub -malleille tai tf.loadLayersModel muunnetuille Keras-malleille.

Siirto-oppimisen käyttäminen

TensorFlow.js tukee siirto-oppimista olennaisesti samalla tavalla kuin TensorFlow. Oppaassa on esimerkkejä MobileNetin mukauttamisesta omiin kuviin ja puhekomentotunnistuksen mallin mukauttamiseen omille ääniluokillesi. Pohjimmiltaan, mitä teet jokaisessa näistä koodilaboreista, on lisätä pieni mukautettu luokittelija koulutetun mallin päälle ja kouluttaa sitä.

Kaiken kaikkiaan TensorFlow.js voi tehdä melkein mitä tahansa. Ottaen kuitenkin huomioon, että TensorFlow.js: n (puutarhan lajitteluprosessorit pelaamista varten) kohdeympäristöissä on tyypillisesti vähemmän GPU-muistia kuin suurissa Nvidia-palvelimen grafiikkasuorittimissa, joita tyypillisesti käytetään TensorFlow-syväharjoitteluun, joudut ehkä joutumaan pienentämään mallin, jotta se toimisi selaimessa. Muunnosapuohjelma tekee osan tästä puolestasi, mutta joudut ehkä joutumaan ottamaan kerrokset manuaalisesti ja pienentämään harjoittelusi eräkokoja.