टेंसर और संचालन

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 को बूल, int32, कॉम्प्लेक्स64 और स्ट्रिंग 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 s को साफ़ करता है जो इसे निष्पादित करने के बाद किसी फ़ंक्शन द्वारा वापस नहीं किए जाते हैं, उसी तरह जैसे किसी फ़ंक्शन को निष्पादित करते समय स्थानीय चर को साफ़ किया जाता है:

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 द्वारा ट्रैक किए गए Tensors की संख्या भी प्राप्त कर सकते हैं:

console.log(tf.memory());

tf.memory() द्वारा मुद्रित ऑब्जेक्ट में यह जानकारी होगी कि वर्तमान में कितनी मेमोरी आवंटित की गई है। आपके द्वारा यहां और अधिक जानकारी प्राप्त की जा सकती है ।