טנזורים ופעולות

TensorFlow.js היא מסגרת להגדרה והרצה של חישובים באמצעות טנסורים ב-JavaScript. טנזור הוא הכללה של וקטורים ומטריצות למימדים גבוהים יותר.

טנזורים

היחידה המרכזית של הנתונים TensorFlow.js הוא tf.Tensor : סט של ערכים בצורת לתוך מערך של מאפיין אחד או יותר. tf.Tensor s דומה מאוד מערכים רבים ממדיים.

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 ים יכול גם להיווצר עם bool, 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 גם מספק סט של שיטות נוחות ליצירת tensors אקראית, tensors מלאים ערך מסוים, tensors מן 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());

פעולות

בעוד טנזורים מאפשרים לך לאחסן נתונים, פעולות (אופס) מאפשרות לך לתפעל את הנתונים האלה. 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 אלמנט מבחינת ים:

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 ים.

אתה יכול למצוא רשימה של תומך TensorFlow.js הפעולות כאן .

זיכרון

בעת שימוש backend 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() תכיל מידע על כמה זיכרון מוקצה כיום. אתה יכול למצוא מידע נוסף כאן .