سنسورها و عملیات

TensorFlow.js چارچوبی برای تعریف و اجرای محاسبات با استفاده از تانسورها در جاوا اسکریپت است. یک تانسور یک کلیت از بردارها و ماتریس به ابعاد بالاتر است.

تانسورها

واحد مرکزی از داده ها در 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 بازدید کنندگان یک دارند float32 dtype. tf.Tensor بازدید کنندگان همچنین می توانید با بولی، int32، complex64 و dtypes رشته ایجاد شود:

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 بازدید کنندگان، و بسیاری دیگر که شما می توانید پیدا اینجا .

تغییر شکل یک تانسور

تعدادی از عناصر در یک 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();

گرفتن مقادیر از یک تانسور

شما همچنین می توانید مقادیر از یک از 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());

عملیات

در حالی که تانسورها به شما اجازه می دهند داده ها را ذخیره کنید، عملیات (ops) به شما امکان می دهد آن داده ها را دستکاری کنید. TensorFlow.js همچنین طیف گسترده ای از عملیات های مناسب برای جبر خطی و یادگیری ماشین را ارائه می دهد که می تواند بر روی تانسورها انجام شود.

به عنوان مثال: محاسبه × 2 از همه عناصر در یک tf.Tensor :

const x = tf.tensor([1, 2, 3, 4]);
const y = x.square();  // equivalent to tf.square(x)
y.print();

به عنوان مثال: اضافه کردن عناصر از دو tf.Tensor بازدید کنندگان عنصر عاقلانه:

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

از آنجایی که تانسورها تغییر ناپذیر هستند، این عملیات ها مقادیر خود را تغییر نمی دهند. در عوض، عملیات بازگشت همیشه جدید بازگشت tf.Tensor است.

شما می توانید یک لیست از پشتیبانی از عملیات های TensorFlow.js پیدا اینجا .

حافظه

هنگام استفاده از بخش مدیریت از WebGL، 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 () است.

همچنین می‌توانید تعداد تنسورهایی که توسط TensorFlow.js ردیابی می‌شوند را دریافت کنید:

console.log(tf.memory());

هدف چاپ شده توسط tf.memory() : اطلاعات مربوط به چه مقدار حافظه در حال حاضر اختصاص داده باشد. شما می توانید اطلاعات بیشتری در اینجا .