Tutvuge TensorFlow.js-iga 7 minutiga

Ja õppige, kuidas saate ML / DL-mudeleid otse brauseris käivitada

Üha enam arendajaid kasutab TensorFlow'd oma masinõppe projektides. Selle aasta märtsis teatas Google'i TensorFlow meeskond kauaoodatud JavaScripti raamistiku TensorFlow.js (mida varem nimetati DeepLearn.js) saabumisest.

Nüüd saavad arendajad ehitada kergeid mudeleid ja neid JavaScripti abil brauseris käitada. Mõistame, mis oli selle raamistiku väljatöötamise vajadus.

Ajalugu

Enne TensorFlow.js-i minekut tahaksin alustada TensorFlow-ga.

TensorFlow töötati 2011. aastal välja Google'is kui nende masinate õppimise / süvendatud õppimise rakenduste raamatukogu. See raamatukogu avati 2015. aastal Apache'i litsentsi alusel.

TensorFlow on sisse ehitatud C ++ -sse, mis võimaldab koodi käivitada väga madalal tasemel. TensorFlow'l on sidemed eri keeltega, nagu Python, R ja Java. See võimaldab TensorFlow'i nendes keeltes kasutada.

Niisiis on ilmne küsimus: kuidas on lood JavaScripti?

Tavapäraselt viidi JavaScripti puhul ML / DL läbi API abil. Mõne raamistiku abil tehti API ja mudel juurutati serveris. Server saatis päringu tulemuste saamiseks JavaScripti abil päringu.

2017. aastal ilmus projekt nimega Deeplearn.js, mille eesmärk oli lubada ML / DL JavaScriptis ilma API-probleemideta.

Kuid kiiruse kohta oli küsimusi. Oli väga hästi teada, et JavaScripti koodi ei saa GPU-l käivitada. Selle probleemi lahendamiseks võeti kasutusele WebGL. See on OpenGL-i brauseri liides. WebGL võimaldas GPU-l JavaScripti koodi käivitada.

2018. aasta märtsis liideti DeepLearn.js meeskond Google'i TensorFlow meeskonnaga ja sai nimeks TensorFlow.js.

Lisateabe saamiseks vaadake allolevat videot:

TensorFlow.js

Tensorflow.js pakub kahte asja:

  • Madalama koodiga tegelev CoreAPI
  • LayerAPI on üles ehitatud CoreAPI-le ja muudab meie elu kergemaks, suurendades abstraktsiooni taset.

Alustamine

TensorFlow.js-i hankimiseks on kaks peamist viisi:

1. sildi kaudu

Lisage järgmine kood HTML-faili:

 Hello 

2. NPM-i kaudu

Lisage oma projekti TensorFlow.js, kasutades lõnga või npm.

yarn add @tensorflow/tfjs
npm install @tensorflow/tfjs

JS-i põhifailis:

import * as tf from '@tensorflow/tfjs';

CoreAPI

1. Tensorid

Mis on tensor?

  • Skalaar on üks number. Näiteks x = 1
  • Vektor on arvude massiiv. Näiteks x = [1,2]
  • Maatriks on 2-D massiiv

    ([[1, 2],

    [3, 4],

    [5, 6]])

  • Tensor on n- mõõtmeline massiiv, mille n > 2

TensorFlow.js-l on kasulikud funktsioonid tavaliste juhtumite jaoks, nagu Scalar, 1D, 2D, 3D ja 4D-tenorid, samuti mitmed funktsioonid tenorite initsialiseerimiseks masinõppe jaoks kasulikel viisidel.

Koodinäited

tf.tensor ():

// Pass an array of values to create a vector.tf.tensor([1, 2, 3, 4]).print();

tf.scalar ():

tf.scalar(3.14).print();

Ja nii edasi…

Vaadake allolevat videot, et saada TensorFlow.js-is põhjalikku ülevaadet Tensoritest:

2. Muutujad ja toimingud

Tensorid on muutumatud andmestruktuurid. See tähendab, et nende väärtusi ei saa pärast seadistamist muuta.

Kuid,tf.variable()tutvustatakse saidil TensorFlow.js. Tegelik juhtum tf.variable()on see, kui peame andmeid sageli muutma, näiteks masinõppes mudelimasside kohandamisel.

Koodinäide:

const x = tf.variable(tf.tensor([1, 2, 3]));x.assign(tf.tensor([4, 5, 6]));x.print();

Operatsioonid

There are various operations in TensorFlow.js. In order to perform mathematical computation on Tensors, we use operations. Tensors are immutable, so all operations always return new Tensors and never modify input Tensors. So tf.variable() can be used in order to save memory.

Let’s look into some operations:

tf.add() — Adds two tf.Tensors element-wise

const a = tf.tensor1d([1, 2, 3, 4]);const b = tf.tensor1d([10, 20, 30, 40]);a.add(b).print(); // or tf.add(a, b)

There are many operations in TensorFlow.js. You can check the documentation for other operations. I will demonstrate one more operation here: tf.matmul()

tf.matmul() — Computes the dot product of two matrices, A * B.

const a = tf.tensor2d([1, 2], [1, 2]);const b = tf.tensor2d([1, 2, 3, 4], [2, 2]);
a.matMul(b).print(); // or tf.matMul(a, b)

Watch the below video for deep insight into Variable and Operations:

3. Memory Management

Memory management is the key in Machine Learning/Deep Learning tasks, because they are generally computationally expensive.

TensorFlow.js provides two major ways to manage memory:

  1. tf.dispose()
  2. tf.tidy()

They both typically do the same thing, but they do it in different ways.

tf.tidy()

This executes the provided function fn and after it is executed, cleans up all intermediate tensors allocated by fn except those returned by fn.

tf.tidy() helps avoid memory leaks. In general, it wraps calls to operations in tf.tidy() for automatic memory cleanup.

Code example:

const y = tf.tidy(() => { // aa, b, and two will be cleaned up when the tidy ends. const two= tf.scalar(2); const aa = tf.scalar(2); const b = aa.square(); console.log('numTensors (in tidy): ' + tf.memory().numTensors); // The value returned inside the tidy function will return // through the tidy, in this case to the variable y. return b.add(two);});console.log('numTensors (outside tidy): ' + tf.memory().numTensors);y.print();

tf.dispose()

Disposes any tf.Tensors found within the mentioned object.

Code example:

const two= tf.scalar(2);
two.dispose()

LayersAPI

Layers are the primary building block for constructing a ML/DL Model. Each layer will typically perform some computation to transform its input to its output. Under the hood, every layer uses the CoreAPI of Tensorflow.js.

Layers will automatically take care of creating and initializing the various internal variables/weights they need to function. So, basically it makes life easier by increasing the level of abstraction.

We will make a simple example feed forward network using the LayerAPI. The Feed Forward network we will build is as below:

Code:

Index.html

Tensorflow JS Demo

main.js

const model = tf.sequential();
//config for layerconst config_hidden = { inputShape:[3], activation:'sigmoid', units:4}const config_output={ units:2, activation:'sigmoid'}
//defining the hidden and output layerconst hidden = tf.layers.dense(config_hidden);const output = tf.layers.dense(config_output);
//adding layers to modelmodel.add(hidden);model.add(output);
//define an optimizerconst optimize=tf.train.sgd(0.1);
//config for modelconst config={optimizer:optimize,loss:'meanSquaredError'}
//compiling the modelmodel.compile(config);
console.log('Model Successfully Compiled');
//Dummy training dataconst x_train = tf.tensor([ [0.1,0.5,0.1], [0.9,0.3,0.4], [0.4,0.5,0.5], [0.7,0.1,0.9]])
//Dummy training labelsconst y_train = tf.tensor([ [0.2,0.8], [0.9,0.10], [0.4,0.6], [0.5,0.5]])
//Dummy testing dataconst x_test = tf.tensor([ [0.9,0.1,0.5]])
train_data().then(function(){ console.log('Training is Complete'); console.log('Predictions :'); model.predict(x_test).print();})
async function train_data(){ for(let i=0;i<10;i++){ const res = await model.fit(x_train,y_train,epoch=1000,batch_size=10); console.log(res.history.loss[0]); }}

Output:

Watch the below videos for deep insight and code explanation:

I understand that this is a small overview on the Tensorflow.js Library. I feel this can be a starting point before you read the documentation and go through some real world applications.

I will be posting real world examples using TensorFlow.js as below:

More Real world examples coming soon…Stay Tuned…

My take on this

This is excellent for coders who are familiar with JavaScript and are trying to find their way in the ML/DL world!

See muudab asjad palju lihtsamaks nende inimeste jaoks, kes tulevad mitte-ML / DL-taustast, kuid kes soovivad sellest valdkonnast aru saada. Selle kasutamise juhtumeid on palju ja ma arvan isiklikult, et see on midagi, mida me praegu vajame.

Oma järgmises artiklis ja videos räägin ML5-st, mis on üles ehitatud TensorFlow.js-le. ML5 on ehitatud New Yorgi ülikoolis ja seda arendatakse aktiivselt.

Mida arvate TensorFlow.js-ist? Andke mulle sellest teada allpool olevast kommentaaride jaotisest. Kui teile see artikkel meeldib, meeldiks mulle ka minu videod Youtube'is.

Kui teile minu artikkel meeldis, klõpsake palun? allpool ja järgige mind M edium'is ja:

Kui teil on küsimusi, palun andke mulle sellest teada allpool olevas kommentaaris või Twitteris .