Độ căng và hoạt động

TensorFlow.js là một framework để xác định và chạy các phép tính bằng cách sử dụng tensor trong JavaScript. Tensor là sự tổng quát hóa của vectơ và ma trận lên các chiều cao hơn.

Tenxơ

Đơn vị dữ liệu trung tâm trong TensorFlow.js là tf.Tensor : một tập hợp các giá trị được định hình thành một mảng có một hoặc nhiều thứ nguyên. tf.Tensor rất giống với mảng đa chiều.

Một tf.Tensor cũng chứa các thuộc tính sau:

  • rank : xác định tenxơ chứa bao nhiêu chiều
  • shape : xác định kích thước của từng chiều của dữ liệu
  • dtype : xác định kiểu dữ liệu của tensor.

Một tf.Tensor có thể được tạo từ một mảng bằng phương thức 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();

Theo mặc định, tf.Tensor s sẽ có dtype float32 dtype. tf.Tensor s cũng có thể được tạo bằng các kiểu bool, int32, complex64 và chuỗi:

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 cũng cung cấp một tập hợp các phương thức tiện lợi để tạo các tensor ngẫu nhiên, tensor chứa một giá trị cụ thể, tensor từ HTMLImageElement và nhiều tensor khác mà bạn có thể tìm thấy ở đây .

Thay đổi hình dạng của Tensor

Số phần tử trong một tf.Tensor là tích của các kích thước trong hình dạng của nó. Vì thường có thể có nhiều hình dạng có cùng kích thước, nên việc định hình lại tf.Tensor thành hình dạng khác có cùng kích thước thường rất hữu ích. Điều này có thể đạt được bằng phương thức 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();

Lấy giá trị từ Tensor

Bạn cũng có thể lấy các giá trị từ tf.Tensor bằng các phương thức Tensor.array() hoặc 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));

Chúng tôi cũng cung cấp các phiên bản đồng bộ của các phương pháp này để sử dụng đơn giản hơn nhưng sẽ gây ra vấn đề về hiệu suất trong ứng dụng của bạn. Bạn nên luôn ưu tiên các phương thức không đồng bộ trong các ứng dụng sản xuất.

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

Hoạt động

Trong khi tensor cho phép bạn lưu trữ dữ liệu thì các thao tác (ops) cho phép bạn thao tác với dữ liệu đó. TensorFlow.js cũng cung cấp nhiều loại hoạt động phù hợp cho đại số tuyến tính và học máy có thể được thực hiện trên tensor.

Ví dụ: tính x 2 của tất cả các phần tử trong tf.Tensor :

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

Ví dụ: thêm các phần tử của hai phần tử tf.Tensor s:

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

Bởi vì tensor là bất biến nên các op này không thay đổi giá trị của chúng. Thay vào đó, ops return luôn trả về tf.Tensor s mới.

Bạn có thể tìm thấy danh sách các hoạt động mà TensorFlow.js hỗ trợ tại đây .

Ký ức

Khi sử dụng phần phụ trợ WebGL, bộ nhớ tf.Tensor phải được quản lý một cách rõ ràng (việc để tf.Tensor vượt quá phạm vi giải phóng bộ nhớ của nó là không đủ ).

Để hủy bộ nhớ của tf.Tensor, bạn có thể sử dụng phương thức dispose() hoặc tf.dispose() :

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

Việc xâu chuỗi nhiều hoạt động lại với nhau trong một ứng dụng là điều rất phổ biến. Việc giữ tham chiếu đến tất cả các biến trung gian để loại bỏ chúng có thể làm giảm khả năng đọc mã. Để giải quyết vấn đề này, TensorFlow.js cung cấp một phương thức tf.tidy() để dọn sạch tất cả tf.Tensor không được hàm trả về sau khi thực thi nó, tương tự như cách các biến cục bộ được dọn sạch khi một hàm được thực thi:

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

Trong ví dụ này, kết quả của square()log() sẽ tự động bị loại bỏ. Kết quả của neg() sẽ không bị loại bỏ vì nó là giá trị trả về của tf.tidy().

Bạn cũng có thể lấy số lượng Tensor được theo dõi bởi TensorFlow.js:

console.log(tf.memory());

Đối tượng được in bởi tf.memory() sẽ chứa thông tin về lượng bộ nhớ hiện được phân bổ. Bạn có thể tìm thêm thông tin ở đây .