টেনসর এবং অপারেশন

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 s-এর একটি float32 dtype. tf.Tensor s-কে bool, int32, complex64, এবং string 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 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.array() বা Tensor.data() পদ্ধতি ব্যবহার করে একটি tf.Tensor থেকে মান পেতে পারেন:

 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 রৈখিক বীজগণিত এবং মেশিন লার্নিং-এর জন্য উপযোগী বিভিন্ন ধরনের অপারেশনও প্রদান করে যা টেনসরগুলিতে করা যেতে পারে।

উদাহরণ: একটি tf.Tensor এ সমস্ত উপাদানের x 2 কম্পিউটিং:

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 s ফেরত দেয়।

আপনি এখানে 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() দ্বারা মুদ্রিত বস্তুটিতে বর্তমানে কত মেমরি বরাদ্দ করা হয়েছে সে সম্পর্কে তথ্য থাকবে। আপনি এখানে আরও তথ্য পেতে পারেন .