Conozca TensorFlow.js en 7 minutos

Y aprenda cómo puede ejecutar modelos ML / DL directamente en el navegador

Un número cada vez mayor de desarrolladores usa TensorFlow en sus proyectos de aprendizaje automático. En marzo de este año, el equipo de TensorFlow en Google anunció la llegada del muy esperado marco de JavaScript, TensorFlow.js (que anteriormente se llamaba DeepLearn.js).

Ahora los desarrolladores pueden crear modelos ligeros y ejecutarlos en el navegador utilizando JavaScript. Entendamos cuál era la necesidad del desarrollo de este marco.

Historia

Antes de ir a TensorFlow.js, me gustaría comenzar con TensorFlow.

TensorFlow se desarrolló en 2011 en Google como su biblioteca propiciatoria para aplicaciones de aprendizaje automático / aprendizaje profundo en Google. Esta biblioteca fue de código abierto en 2015 bajo la licencia Apache.

TensorFlow está integrado en C ++, lo que permite que el código se ejecute a un nivel muy bajo. TensorFlow tiene enlaces a diferentes lenguajes como Python, R y Java. Esto permite que TensorFlow se use en estos idiomas.

Entonces, la pregunta obvia es: ¿qué pasa con JavaScript?

Convencionalmente, en JavaScript, ML / DL se realizó utilizando una API. Se creó una API utilizando algún marco y el modelo se implementó en el servidor. El cliente envió una solicitud utilizando JavaScript para obtener resultados del servidor.

En 2017, apareció un proyecto llamado Deeplearn.js, que tenía como objetivo habilitar ML / DL en JavaScript, sin la molestia de la API.

Pero había dudas sobre la velocidad. Era bien sabido que el código JavaScript no se podía ejecutar en la GPU. Para resolver este problema, se introdujo WebGL. Esta es una interfaz de navegador para OpenGL. WebGL habilitó la ejecución de código JavaScript en GPU.

En marzo de 2018, el equipo de DeepLearn.js se fusionó con el equipo de TensorFlow en Google y pasó a llamarse TensorFlow.js.

Vea el video a continuación para obtener más detalles:

TensorFlow.js

Tensorflow.js proporciona dos cosas:

  • El CoreAPI, que se ocupa del código de bajo nivel
  • LayerAPI se basa en CoreAPI y nos facilita la vida al aumentar el nivel de abstracción.

Empezando

Hay dos formas principales de obtener TensorFlow.js en tu proyecto:

1. vía etiqueta

Agregue el siguiente código a un archivo HTML:

 Hello 

2. vía NPM

Agrega TensorFlow.js a tu proyecto con yarn o npm.

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

En su archivo js principal:

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

CoreAPI

1. Tensores

Entonces, ¿qué es un tensor?

  • Un escalar es un solo número. Por ejemplo, x = 1
  • Un vector es una matriz de números. Por ejemplo, x = [1,2]
  • Una matriz es una matriz 2-D

    ([[1, 2],

    [3, 4],

    [5, 6]])

  • Un tensor es una matriz de n dimensiones con n > 2

TensorFlow.js tiene funciones de utilidad para casos comunes como tensores escalares, 1D, 2D, 3D y 4D, así como una serie de funciones para inicializar tensores de formas útiles para el aprendizaje automático.

Ejemplos de código

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

Y así…

Mire el video a continuación para obtener una visión profunda de los tensores en TensorFlow.js:

2. Variables y operaciones

Los tensores son estructuras de datos inmutables. Eso significa que sus valores no se pueden cambiar una vez que se establecen.

Sin embargo,tf.variable()se introduce en TensorFlow.js. El caso de uso real tf.variable()es cuando necesitamos cambiar los datos con frecuencia, como cuando se ajustan los pesos del modelo en Machine Learning.

Muestra de código:

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

Operaciones

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!

It makes things a lot simpler for people coming from a non-ML/DL background, but who are looking to understand this field. The use cases for this are many, and I personally think it’s something we need at the moment.

In my next article and video, I will talk about ML5 which is built over TensorFlow.js. ML5 is built at New York University and is under active development.

What do you think about TensorFlow.js? Let me know in the comments section below. If you like this article, you would also like my Videos on Youtube.

If you liked my article, please click the ? below And follow me on Medium & :

If you have any questions, please let me know in a comment below or Twitter.