Tensor dan operasi

TensorFlow.js adalah framework untuk mendefinisikan dan menjalankan komputasi menggunakan tensor dalam JavaScript. Tensor adalah generalisasi vektor dan matriks ke dimensi yang lebih tinggi.

Tensor

Unit pusat data di TensorFlow.js adalah tf.Tensor : sekumpulan nilai yang dibentuk menjadi array dengan satu dimensi atau lebih. tf.Tensor s sangat mirip dengan array multidimensi.

tf.Tensor juga berisi properti berikut:

  • rank : menentukan berapa banyak dimensi yang dikandung tensor
  • shape : yang mendefinisikan ukuran setiap dimensi data
  • dtype : yang mendefinisikan tipe data tensor.

tf.Tensor dapat dibuat dari array dengan metode 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();

Secara default, tf.Tensor s akan memiliki tipe d float32 dtype. tf.Tensor s juga dapat dibuat dengan tipe bool, int32, complex64, dan string:

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 juga menyediakan serangkaian metode praktis untuk membuat tensor acak, tensor yang diisi dengan nilai tertentu, tensor dari HTMLImageElement s, dan masih banyak lagi yang dapat Anda temukan di sini .

Mengubah bentuk Tensor

Jumlah elemen dalam tf.Tensor adalah hasil kali ukuran bentuknya. Karena sering kali terdapat beberapa bentuk dengan ukuran yang sama, seringkali berguna untuk membentuk ulang tf.Tensor ke bentuk lain dengan ukuran yang sama. Hal ini dapat dicapai dengan metode 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();

Mendapatkan nilai dari Tensor

Anda juga bisa mendapatkan nilai dari tf.Tensor menggunakan metode Tensor.array() atau 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));

Kami juga menyediakan versi sinkron dari metode ini yang lebih mudah digunakan, namun akan menyebabkan masalah kinerja pada aplikasi Anda. Anda harus selalu memilih metode asinkron dalam aplikasi produksi.

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

Operasi

Meskipun tensor memungkinkan Anda menyimpan data, operasi (operasi) memungkinkan Anda memanipulasi data tersebut. TensorFlow.js juga menyediakan beragam operasi yang cocok untuk aljabar linier dan pembelajaran mesin yang dapat dilakukan pada tensor.

Contoh: menghitung x 2 semua elemen dalam tf.Tensor :

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

Contoh: menambahkan elemen dari dua elemen 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();

Karena tensor tidak dapat diubah, operasi ini tidak mengubah nilainya. Sebaliknya, ops return selalu mengembalikan tf.Tensor baru.

Anda dapat menemukan daftar operasi yang didukung TensorFlow.js di sini .

Penyimpanan

Saat menggunakan backend WebGL, memori tf.Tensor harus dikelola secara eksplisit ( tidak cukup membiarkan tf.Tensor keluar dari cakupan agar memorinya dilepaskan).

Untuk menghancurkan memori tf.Tensor, Anda dapat menggunakan metode dispose() atau tf.dispose() :

const a = tf.tensor([[1, 2], [3, 4]]);
a.dispose(); // Equivalent to tf.dispose(a)

Sangat umum untuk menyatukan beberapa operasi dalam satu aplikasi. Menahan referensi ke semua variabel perantara untuk membuangnya dapat mengurangi keterbacaan kode. Untuk mengatasi masalah ini, TensorFlow.js menyediakan metode tf.tidy() yang membersihkan semua tf.Tensor yang tidak dikembalikan oleh suatu fungsi setelah menjalankannya, serupa dengan cara variabel lokal dibersihkan ketika suatu fungsi dijalankan:

const a = tf.tensor([[1, 2], [3, 4]]);
const y = tf.tidy(() => {
  const result = a.square().log().neg();
  return result;
});

Dalam contoh ini, hasil dari square() dan log() akan otomatis dibuang. Hasil dari neg() tidak akan dibuang karena merupakan nilai kembalian dari tf.tidy().

Anda juga bisa mendapatkan jumlah Tensor yang dilacak oleh TensorFlow.js:

console.log(tf.memory());

Objek yang dicetak oleh tf.memory() akan berisi informasi tentang berapa banyak memori yang dialokasikan saat ini. Anda dapat menemukan informasi lebih lanjut di sini .