تعرف على TensorFlow.js في 7 دقائق

وتعلم كيف يمكنك تشغيل نماذج ML / DL مباشرة في المتصفح

يستخدم عدد متزايد من المطورين TensorFlow في مشاريع التعلم الآلي الخاصة بهم. في مارس من هذا العام ، أعلن فريق TensorFlow في Google عن وصول إطار عمل JavaScript الذي طال انتظاره ، TensorFlow.js (والذي كان يُسمى سابقًا DeepLearn.js).

يمكن للمطورين الآن إنشاء نماذج خفيفة الوزن وتشغيلها في المتصفح باستخدام JavaScript. دعونا نفهم ما هي الحاجة إلى تطوير هذا الإطار.

التاريخ

قبل الانتقال إلى TensorFlow.js ، أود أن أبدأ بـ TensorFlow.

تم تطوير TensorFlow في عام 2011 في Google كمكتبة استرضائية لتطبيقات التعلم الآلي / التعلم العميق في Google. تم فتح هذه المكتبة في عام 2015 بموجب ترخيص Apache.

تم تصميم TensorFlow في C ++ ، مما يتيح تنفيذ التعليمات البرمجية بمستوى منخفض للغاية. يحتوي TensorFlow على روابط بلغة مختلفة مثل Python و R و Java. يتيح هذا إمكانية استخدام TensorFlow في هذه اللغات.

إذن ، السؤال الواضح هو: ماذا عن JavaScript؟

تقليديا ، في JavaScript ، تم إجراء ML / DL باستخدام API. تم إنشاء API باستخدام بعض الإطارات ، وتم نشر النموذج على الخادم. أرسل العميل طلبًا باستخدام JavaScript للحصول على نتائج من الخادم.

في عام 2017 ، ظهر مشروع يسمى Deeplearn.js ، والذي يهدف إلى تمكين ML / DL في JavaScript ، دون متاعب API.

لكن كانت هناك تساؤلات حول السرعة. كان معروفًا جدًا أن شفرة JavaScript لا يمكن تشغيلها على GPU. لحل هذه المشكلة ، تم تقديم WebGL. هذه واجهة متصفح لبرنامج OpenGL. أتاح WebGL تنفيذ كود JavaScript على GPU.

في مارس 2018 ، اندمج فريق DeepLearn.js في فريق TensorFlow في Google وتمت إعادة تسميته TensorFlow.js.

شاهد الفيديو أدناه لمزيد من التفاصيل:

TensorFlow.js

يوفر Tensorflow.js شيئين:

  • CoreAPI ، الذي يتعامل مع كود المستوى المنخفض
  • تم بناء LayerAPI على CoreAPI ، مما يجعل حياتنا أسهل من خلال زيادة مستوى التجريد.

ابدء

هناك طريقتان رئيسيتان للحصول على TensorFlow.js في مشروعك:

1. عبر بطاقة

أضف التعليمات البرمجية التالية إلى ملف HTML:

 Hello 

2. عبر NPM

أضف TensorFlow.js إلى مشروعك باستخدام الغزل أو npm.

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

في ملف js الرئيسي:

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

CoreAPI

1. موتر

إذن ، ما هو Tensor؟

  • العدد القياسي هو رقم واحد. على سبيل المثال ، x = 1
  • المتجه هو مجموعة من الأرقام. على سبيل المثال ، x = [1،2]
  • المصفوفة هي مصفوفة ثنائية الأبعاد

    ([[1 ، 2] ،

    [3 ، 4] ،

    [5 ، 6]])

  • A موتر هو n- تم صفيف الأبعاد مع ن > 2

يحتوي TensorFlow.js على وظائف مفيدة للحالات الشائعة مثل موترات Scalar و 1 D و 2 D و 3D و 4 D ، بالإضافة إلى عدد من الوظائف لتهيئة الموترات بطرق مفيدة للتعلم الآلي.

أمثلة التعليمات البرمجية

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

وهلم جرا…

شاهد الفيديو أدناه للحصول على نظرة عميقة عن Tensors في TensorFlow.js:

2. المتغيرات والعمليات

الموترات هي هياكل بيانات غير قابلة للتغيير. هذا يعني أنه لا يمكن تغيير قيمهم بمجرد تعيينها.

ومع ذلك،tf.variable()تم تقديمه في TensorFlow.js. حالة الاستخدام الحقيقية tf.variable()هي عندما نحتاج إلى تغيير البيانات بشكل متكرر ، على سبيل المثال عند ضبط أوزان النموذج في التعلم الآلي.

عينة التعليمات البرمجية:

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

عمليات

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!

إنه يجعل الأمور أبسط كثيرًا للأشخاص القادمين من خلفية غير ML / DL ، لكنهم يتطلعون إلى فهم هذا المجال. حالات الاستخدام لهذا كثيرة ، وأنا شخصياً أعتقد أنه شيء نحتاجه في الوقت الحالي.

في مقالتي والفيديو التالي ، سأتحدث عن ML5 المبني على TensorFlow.js. تم بناء ML5 في جامعة نيويورك وهي قيد التطوير النشط.

ما رأيك في TensorFlow.js؟ اسمحوا لي أن أعرف في قسم التعليقات أدناه. إذا كنت تحب هذه المقالة ، فأنت تريد أيضًا مقاطع الفيديو الخاصة بي على Youtube.

إذا كنت تحب مقالتي ، يرجى النقر فوق؟ أدناه و اتبعني على M edium &:

إذا كان لديك أي أسئلة ، فيرجى إبلاغي بذلك في تعليق أدناه أو Twitter .