TensorFlow.js هو إطار عمل لتعريف الحسابات وتشغيلها باستخدام الموترات في JavaScript. الموتر هو تعميم للمتجهات والمصفوفات على أبعاد أعلى.
موتر
الوحدة المركزية للبيانات في TensorFlow.js هي tf.Tensor
: مجموعة من القيم التي تم تشكيلها في مصفوفة ذات بُعد واحد أو أكثر. tf.Tensor
إلى حد كبير مع المصفوفات متعددة الأبعاد.
يحتوي tf.Tensor
أيضًا على الخصائص التالية:
-
rank
: يحدد عدد الأبعاد التي يحتوي عليها الموتر -
shape
: الذي يحدد حجم كل بُعد من أبعاد البيانات -
dtype
: الذي يحدد نوع بيانات الموتر.
يمكن إنشاء tf.Tensor
من مصفوفة باستخدام tf.tensor()
:
// Create a rank-2 tensor (matrix) matrix tensor from a multidimensional array.
const a = tf.tensor([[1, 2], [3, 4]]);
console.log('shape:', a.shape);
a.print();
// Or you can create a tensor from a flat array and specify a shape.
const shape = [2, 2];
const b = tf.tensor([1, 2, 3, 4], shape);
console.log('shape:', b.shape);
b.print();
بشكل افتراضي ، سيكون لدى tf.Tensor
s نوع float32
dtype.
tf.Tensor
يمكن أيضًا إنشاء أجهزة الاستشعار باستخدام أنواع البيانات المنطقية و int32 و complex64 والسلسلة:
const a = tf.tensor([[1, 2], [3, 4]], [2, 2], 'int32');
console.log('shape:', a.shape);
console.log('dtype', a.dtype);
a.print();
يوفر TensorFlow.js أيضًا مجموعة من الطرق الملائمة لإنشاء موترات عشوائية ، وموترات مملوءة بقيمة معينة ، وموترات من HTMLImageElement
s ، وغيرها الكثير التي يمكنك العثور عليها هنا .
تغيير شكل موتر
عدد العناصر في tf.Tensor
هو حاصل ضرب الأحجام في شكله. نظرًا لأنه في كثير من الأحيان يمكن أن يكون هناك أشكال متعددة بنفس الحجم ، فمن المفيد غالبًا أن تكون قادرًا على إعادة تشكيل tf.Tensor
إلى شكل آخر بنفس الحجم. يمكن تحقيق ذلك باستخدام طريقة reshape()
:
const a = tf.tensor([[1, 2], [3, 4]]);
console.log('a shape:', a.shape);
a.print();
const b = a.reshape([4, 1]);
console.log('b shape:', b.shape);
b.print();
الحصول على القيم من Tensor
يمكنك أيضًا الحصول على القيم من tf.Tensor
باستخدام طريقة Tensor.array()
أو Tensor.data()
:
const a = tf.tensor([[1, 2], [3, 4]]);
// Returns the multi dimensional array of values.
a.array().then(array => console.log(array));
// Returns the flattened data that backs the tensor.
a.data().then(data => console.log(data));
نوفر أيضًا إصدارات متزامنة من هذه الطرق والتي تكون أسهل في الاستخدام ، ولكنها ستتسبب في حدوث مشكلات في الأداء في التطبيق الخاص بك. يجب أن تفضل دائمًا الأساليب غير المتزامنة في تطبيقات الإنتاج.
const a = tf.tensor([[1, 2], [3, 4]]);
// Returns the multi dimensional array of values.
console.log(a.arraySync());
// Returns the flattened data that backs the tensor.
console.log(a.dataSync());
عمليات
بينما تسمح لك الموترات بتخزين البيانات ، تسمح لك العمليات (العمليات) بمعالجة تلك البيانات. يوفر TensorFlow.js أيضًا مجموعة متنوعة من العمليات المناسبة للجبر الخطي والتعلم الآلي التي يمكن إجراؤها على الموترات.
مثال: حساب x 2 لجميع العناصر في tf.Tensor
.
const x = tf.tensor([1, 2, 3, 4]);
const y = x.square(); // equivalent to tf.square(x)
y.print();
مثال: إضافة عناصر من عنصرين tf.Tensor
-wise:
const a = tf.tensor([1, 2, 3, 4]);
const b = tf.tensor([10, 20, 30, 40]);
const y = a.add(b); // equivalent to tf.add(a, b)
y.print();
لأن الموترات غير قابلة للتغيير ، فإن هذه العمليات لا تغير قيمها. بدلاً من ذلك ، تقوم ops بإرجاع tf.Tensor
s الجديد دائمًا.
يمكنك العثور على قائمة بالعمليات التي يدعمها TensorFlow.js هنا .
ذاكرة
عند استخدام WebGL backend ، يجب إدارة ذاكرة tf.Tensor
بشكل صريح ( لا يكفي السماح tf.Tensor
بالخروج عن نطاق إصدار ذاكرته).
لتدمير ذاكرة tf.Tensor ، يمكنك استخدام طريقة dispose()
أو tf.dispose()
:
const a = tf.tensor([[1, 2], [3, 4]]);
a.dispose(); // Equivalent to tf.dispose(a)
من الشائع جدًا ربط عمليات متعددة معًا في أحد التطبيقات. يمكن أن يؤدي الاحتفاظ بمرجع إلى جميع المتغيرات الوسيطة للتخلص منها إلى تقليل قابلية قراءة الكود. لحل هذه المشكلة ، يوفر TensorFlow.js طريقة tf.tidy()
التي تنظف جميع tf.Tensor
التي لم يتم إرجاعها بواسطة دالة بعد تنفيذها ، على غرار الطريقة التي يتم بها تنظيف المتغيرات المحلية عند تنفيذ الوظيفة:
const a = tf.tensor([[1, 2], [3, 4]]);
const y = tf.tidy(() => {
const result = a.square().log().neg();
return result;
});
في هذا المثال ، سيتم التخلص من نتيجة square()
log()
تلقائيًا. لن يتم التخلص من نتيجة neg()
لأنها القيمة المعادة لـ tf.tidy ().
يمكنك أيضًا الحصول على عدد Tensors الذي تم تتبعه بواسطة TensorFlow.js:
console.log(tf.memory());
سيحتوي الكائن الذي تمت طباعته بواسطة tf.memory()
على معلومات حول مقدار الذاكرة المخصصة حاليًا. يمكنك العثور على مزيد من المعلومات هنا .