Tensor dan operasi

TensorFlow.js adalah kerangka kerja untuk mendefinisikan dan menjalankan komputasi menggunakan tensor dalam JavaScript. Sebuah tensor adalah generalisasi dari vektor dan matriks untuk dimensi yang lebih tinggi.

Tensor

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

Sebuah tf.Tensor juga mengandung sifat sebagai berikut:

  • rank : mendefinisikan berapa banyak dimensi tensor mengandung
  • shape : yang mendefinisikan ukuran masing-masing dimensi data
  • dtype : yang mendefinisikan tipe data dari tensor tersebut.

Sebuah tf.Tensor dapat dibuat dari sebuah array dengan tf.tensor() metode:

// 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 float32 dtype. tf.Tensor juga dapat dibuat dengan bool, int32, complex64, dan dtypes tali:

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 satu set metode kenyamanan untuk menciptakan tensor acak, tensor diisi dengan nilai tertentu, tensor dari HTMLImageElement s, dan banyak lagi yang dapat Anda temukan di sini .

Mengubah bentuk Tensor

Jumlah elemen dalam tf.Tensor adalah produk dari ukuran dalam bentuknya. Karena sering kali bisa ada beberapa bentuk dengan ukuran yang sama, hal ini sering berguna untuk dapat membentuk kembali sebuah tf.Tensor ke bentuk lain dengan ukuran yang sama. Hal ini dapat dicapai dengan reshape() metode:

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-nilai dari tf.Tensor menggunakan Tensor.array() atau Tensor.data() metode:

 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, tetapi akan menyebabkan masalah kinerja dalam 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

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

Contoh: komputasi x 2 dari 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 dua tf.Tensor s elemen-bijaksana:

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 kembali baru tf.Tensor s.

Anda dapat menemukan daftar operasi TensorFlow.js mendukung sini .

Penyimpanan

Bila menggunakan backend WebGL, tf.Tensor memori harus dikelola secara eksplisit (itu tidak cukup untuk membiarkan tf.Tensor keluar dari ruang lingkup untuk memori yang akan dirilis).

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

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

Sangat umum untuk menghubungkan beberapa operasi bersama-sama dalam suatu aplikasi. Memegang referensi ke semua variabel perantara untuk membuangnya dapat mengurangi keterbacaan kode. Untuk mengatasi masalah ini, TensorFlow.js menyediakan tf.tidy() metode yang membersihkan semua tf.Tensor s yang tidak dikembalikan oleh fungsi setelah melaksanakan itu, mirip dengan cara variabel lokal dibersihkan ketika 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 square() dan log() secara otomatis akan dibuang. Hasil neg() tidak akan dibuang karena nilai kembali dari tf.tidy yang ().

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

console.log(tf.memory());

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