Lær TensorFlow.js at kende på 7 minutter

Og lær hvordan du kan køre ML / DL-modeller direkte i browseren

Et stigende antal udviklere bruger TensorFlow i deres maskinlæringsprojekter. I marts i år annoncerede TensorFlow-teamet hos Google ankomsten af ​​den længe ventede JavaScript-ramme, TensorFlow.js (som tidligere blev kaldt DeepLearn.js).

Nu kan udviklere bygge lette modeller og køre dem i browseren ved hjælp af JavaScript. Lad os forstå, hvad behovet var for udviklingen af ​​denne ramme.

Historie

Før jeg går til TensorFlow.js, vil jeg gerne starte med TensorFlow.

TensorFlow blev udviklet i 2011 på Google som deres forligsbibliotek til maskinindlæring / Deep learning-applikationer hos Google. Dette bibliotek blev åbnet i 2015 under Apache-licensen.

TensorFlow er bygget i C ++, hvilket gør det muligt for koden at udføres på et meget lavt niveau. TensorFlow har bindinger til forskellige sprog som Python, R og Java. Dette gør det muligt for TensorFlow at blive brugt på disse sprog.

Så det åbenlyse spørgsmål er: hvad med JavaScript?

I JavaScript blev ML / DL konventionelt udført ved hjælp af en API. En API blev lavet ved hjælp af nogle rammer, og modellen blev implementeret på serveren. Klienten sendte en anmodning ved hjælp af JavaScript for at få resultater fra serveren.

I 2017 dukkede et projekt kaldet Deeplearn.js sigte på at aktivere ML / DL i JavaScript uden API-besvær.

Men der var spørgsmål om hastighed. Det var meget velkendt, at JavaScript-kode ikke kunne køre på GPU. For at løse dette problem blev WebGL introduceret. Dette er en browsergrænseflade til OpenGL. WebGL aktiverede udførelsen af ​​JavaScript-kode på GPU.

I marts 2018 blev DeepLearn.js-teamet fusioneret i TensorFlow-teamet hos Google og blev omdøbt til TensorFlow.js.

Se nedenstående video for yderligere detaljer:

TensorFlow.js

Tensorflow.js indeholder to ting:

  • CoreAPI, der beskæftiger sig med lavt niveau kode
  • LayerAPI er bygget over CoreAPI og gør vores liv lettere ved at øge abstraktionsniveauet.

Kom godt i gang

Der er to måder at få TensorFlow.js på i dit projekt:

1. via tag

Føj følgende kode til en HTML-fil:

 Hello 

2. via NPM

Føj TensorFlow.js til dit projekt ved hjælp af garn eller npm.

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

I din primære js-fil:

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

CoreAPI

1. Tensorer

Så hvad er en Tensor?

  • En skalar er et enkelt tal. For eksempel er x = 1
  • En vektor er en række tal. For eksempel x = [1,2]
  • En matrix er et 2-D-array

    ([[1, 2],

    [3, 4],

    [5, 6]])

  • A tensor is a n-dimensional array with n>2

TensorFlow.js has utility functions for common cases like Scalar, 1D, 2D, 3D and 4D tensors, as well a number of functions to initialize tensors in ways useful for machine learning.

Code Examples

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

And so on…

Watch the Below Video to get a deep insight into Tensors in TensorFlow.js:

2. Variables & Operations

Tensors are immutable data structures. That means their values can’t be changed once they are set.

However,tf.variable()is introduced in TensorFlow.js. The real use case for tf.variable() is when we need to change the data frequently, such as when adjusting model weights in Machine Learning.

Code sample:

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

Operations

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!

Det gør tingene meget enklere for folk, der kommer fra en ikke-ML / DL baggrund, men som ønsker at forstå dette felt. Brugssagerne til dette er mange, og jeg synes personligt, at det er noget, vi har brug for i øjeblikket.

I min næste artikel og video vil jeg tale om ML5, som er bygget over TensorFlow.js. ML5 er bygget ved New York University og er under aktiv udvikling.

Hvad synes du om TensorFlow.js? Lad mig vide i kommentarfeltet nedenfor. Hvis du kan lide denne artikel, vil du også gerne have mine videoer på Youtube.

Hvis du kunne lide min artikel, skal du klikke på? nedenfor og følg mig på M edium &:

Hvis du har spørgsmål, så lad mig det vide i en kommentar nedenfor eller Twitter .