Lưu ngày! Google I / O hoạt động trở lại từ ngày 18 đến 20 tháng 5 Đăng ký ngay
Trang này được dịch bởi Cloud Translation API.
Switch to English

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

TensorFlow.js là một khung công tác để xác định và chạy các tính toán sử dụng các tensor trong JavaScript. Một tensor là một tổng quát của các vectơ và ma trận cho các kích thước cao hơn.

Căng thẳng

Đơn vị trung tâm của dữ liệu 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 kích thước. tf.Tensor s rất giống với mảng nhiều chiều.

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

  • rank : xác định có bao nhiêu kích thước mà tensor chứa
  • shape : xác định kích thước của từng thứ nguyên 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 với 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ó float32 dtype. tf.Tensor cũng có thể được tạo với các kiểu bool, int32, complex64 và 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 cũng cung cấp một tập hợp các phương pháp 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 s và nhiều phương pháp khác mà bạn có thể tìm thấy tại đây .

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

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

Nhận 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 đơn giản hơn để sử dụng, nhưng sẽ gây ra các vấn đề về hiệu suất trong ứng dụng của bạn. Bạn nên luôn thích các phương pháp 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 tensors cho phép bạn lưu trữ dữ liệu, các hoạt động (ops) cho phép bạn thao tác với dữ liệu đó. TensorFlow.js cũng cung cấp nhiều 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 tensors.

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 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, các ops 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ụ trợ WebGL, bộ nhớ tf.Tensor phải được quản lý một cách rõ ràng ( không đủ để cho phép tf.Tensor ra khỏi phạm vi để bộ nhớ của nó được giải phó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à rất phổ biến. Giữ một 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() để xóa tất cả cá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 dẹp 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 được 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ể nhận được số lượng Tensors đượ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 cấp phát. Bạn có thể tìm thêm thông tin tại đây .