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

Lưu và tải mô hình

TensorFlow.js cung cấp chức năng lưu và tải các mô hình đã được tạo bằng API Layers hoặc được chuyển đổi từ các mô hình TensorFlow hiện có. Đây có thể là những mô hình bạn đã tự đào tạo hoặc những mô hình do người khác đào tạo. Lợi ích chính của việc sử dụng api Lớp là các mô hình được tạo bằng nó có thể tuần tự hóa và đây là những gì chúng ta sẽ khám phá trong hướng dẫn này.

Hướng dẫn này sẽ tập trung vào việc lưu và tải các mô hình TensorFlow.js (có thể nhận dạng bằng các tệp JSON). Chúng tôi cũng có thể nhập các mô hình Python của TensorFlow. Tải các mô hình này được đề cập trong hai hướng dẫn sau:

Lưu một tf.Model

tf.Modeltf.Sequential đều cung cấp một hàm model.save cho phép bạn lưu cấu trúc liên kếttrọng số của một mô hình.

  • Topo: Đây là một tệp mô tả kiến ​​trúc của một mô hình (tức là nó sử dụng các thao tác nào). Nó chứa các tham chiếu đến trọng lượng của mô hình được lưu trữ bên ngoài.

  • Trọng số: Đây là các tệp nhị phân lưu trữ trọng số của một mô hình nhất định ở định dạng hiệu quả. Chúng thường được lưu trữ trong cùng một thư mục với cấu trúc liên kết.

Hãy xem mã để lưu một mô hình trông như thế nào

const saveResult = await model.save('localstorage://my-model-1');

Một số điều cần lưu ý:

  • Phương thức save nhận đối số chuỗi giống như URL bắt đầu bằng một lược đồ . Điều này mô tả loại đích mà chúng tôi đang cố gắng lưu một mô hình. Trong ví dụ trên, lược đồ là localstorage://
  • Đề án được theo sau bởi một đường dẫn . Trong ví dụ trên, đường dẫn là my-model-1 .
  • Phương thức save là không đồng bộ.
  • Giá trị trả về của model.save là một đối tượng JSON mang thông tin như kích thước byte của cấu trúc liên kết và trọng số của mô hình.
  • Môi trường được sử dụng để lưu mô hình không ảnh hưởng đến môi trường nào có thể tải mô hình. Lưu một mô hình trong node.js không ngăn nó được tải trong trình duyệt.

Dưới đây chúng tôi sẽ xem xét các chương trình khác nhau có sẵn

Bộ nhớ cục bộ (chỉ trình duyệt)

Đề án: localstorage://

await model.save('localstorage://my-model');

Thao tác này sẽ lưu một mô hình dưới tên my-model trong bộ nhớ cục bộ của trình duyệt. Điều này sẽ tồn tại giữa các lần làm mới, mặc dù người dùng hoặc chính trình duyệt có thể xóa bộ nhớ cục bộ nếu dung lượng trở thành mối quan tâm. Mỗi trình duyệt cũng đặt giới hạn riêng về lượng dữ liệu có thể được lưu trữ trong bộ nhớ cục bộ cho một miền nhất định.

IndexedDB (Chỉ trình duyệt)

Đề án: indexeddb://

await model.save('indexeddb://my-model');

Thao tác này sẽ lưu một mô hình vào bộ nhớ IndexedDB của trình duyệt. Giống như bộ nhớ cục bộ, nó tồn tại giữa các lần làm mới, nó cũng có xu hướng có giới hạn lớn hơn về kích thước của các đối tượng được lưu trữ.

Tải xuống tệp (chỉ dành cho trình duyệt)

Lược đồ: downloads://

await model.save('downloads://my-model');

Điều này sẽ khiến trình duyệt tải các tệp mô hình xuống máy của người dùng. Hai tệp sẽ được tạo:

  1. Tệp JSON văn bản có tên [my-model].json , mang cấu trúc liên kết và tham chiếu đến tệp trọng số được mô tả bên dưới.
  2. Tệp nhị phân mang các giá trị trọng số có tên [my-model].weights.bin .

Bạn có thể thay đổi tên [my-model] để nhận các tệp có tên khác.

Vì tệp .json trỏ đến .bin bằng đường dẫn tương đối, hai tệp phải nằm trong cùng một thư mục.

Yêu cầu HTTP (S)

Lược đồ: http:// hoặc https://

await model.save('http://model-server.domain/upload')

Thao tác này sẽ tạo một yêu cầu web để lưu một mô hình vào một máy chủ từ xa. Bạn nên kiểm soát máy chủ từ xa đó để có thể đảm bảo rằng nó có thể xử lý yêu cầu.

Mô hình sẽ được gửi đến máy chủ HTTP được chỉ định thông qua một yêu cầu POST . Nội dung của BÀI ĐĂNG ở định dạng multipart/form-data và bao gồm hai tệp

  1. Tệp JSON văn bản có tên model.json , mang cấu trúc liên kết và tham chiếu đến tệp trọng số được mô tả bên dưới.
  2. Một tệp nhị phân mang các giá trị trọng số có tên là model.weights.bin .

Lưu ý rằng tên của hai tệp sẽ luôn chính xác như được chỉ định ở trên (tên được tích hợp sẵn trong hàm). Tài liệu api này chứa một đoạn mã Python trình bày cách người ta có thể sử dụng khung web flask để xử lý yêu cầu bắt nguồn từ save .

Thường thì bạn sẽ phải chuyển nhiều đối số hơn hoặc yêu cầu tiêu đề đến máy chủ HTTP của mình (ví dụ: để xác thực hoặc nếu bạn muốn chỉ định một thư mục mà mô hình sẽ được lưu trong đó). Bạn có thể có được quyền kiểm soát chi tiết đối với các khía cạnh này của yêu cầu từ save bằng cách thay thế đối số chuỗi URL trong tf.io.browserHTTPRequest . API này cung cấp khả năng linh hoạt cao hơn trong việc kiểm soát các yêu cầu HTTP.

Ví dụ:

await model.save(tf.io.browserHTTPRequest(
    'http://model-server.domain/upload',
    {method: 'PUT', headers: {'header_key_1': 'header_value_1'} }));

Hệ thống tệp gốc (chỉ Node.js)

Lược đồ: file://

await model.save('file:///path/to/my-model');

Khi chạy trên Node.js, chúng tôi cũng có quyền truy cập trực tiếp vào hệ thống tệp và có thể lưu mô hình ở đó. Lệnh trên sẽ lưu hai tệp vào path được chỉ định để truy xuất scheme .

  1. Tệp JSON văn bản có tên [model].json , mang cấu trúc liên kết và tham chiếu đến tệp trọng số được mô tả bên dưới.
  2. Tệp nhị phân chứa các giá trị trọng số có tên [model].weights.bin .

Lưu ý rằng tên của hai tệp sẽ luôn chính xác như được chỉ định ở trên (tên được tích hợp sẵn trong hàm).

Đang tải tf.Model

Với một mô hình đã được lưu bằng một trong các phương pháp ở trên, chúng tôi có thể tải mô hình đó bằng API tf.loadLayersModel .

Hãy xem mã để tải một mô hình trông như thế nào

const model = await tf.loadLayersModel('localstorage://my-model-1');

Một số điều cần lưu ý:

  • Giống như model.save() , hàm loadLayersModel nhận đối số chuỗi giống như URL bắt đầu bằng một lược đồ . Điều này mô tả loại đích mà chúng tôi đang cố gắng tải mô hình từ đó.
  • Đề án được theo sau bởi một đường dẫn . Trong ví dụ trên, đường dẫn là my-model-1 .
  • Chuỗi giống url có thể được thay thế bằng một đối tượng phù hợp với giao diện IOHandler.
  • Hàm tf.loadLayersModel() là không đồng bộ.
  • Giá trị trả về của tf.loadLayersModeltf.Model

Dưới đây chúng tôi sẽ xem xét các chương trình khác nhau có sẵn

Bộ nhớ cục bộ (chỉ trình duyệt)

Đề án: localstorage://

const model = await tf.loadLayersModel('localstorage://my-model');

Thao tác này tải một mô hình có tên là mô hình my-model từ bộ nhớ cục bộ của trình duyệt.

IndexedDB (Chỉ trình duyệt)

Đề án: indexeddb://

const model = await tf.loadLayersModel('indexeddb://my-model');

Thao tác này tải một mô hình từ bộ nhớ IndexedDB của trình duyệt.

HTTP (S)

Lược đồ: http:// hoặc https://

const model = await tf.loadLayersModel('http://model-server.domain/download/model.json');

Điều này tải một mô hình từ một điểm cuối http. Sau khi tải tệp json , hàm sẽ yêu cầu các tệp .bin tương ứng mà tệp json tham chiếu.

Hệ thống tệp gốc (chỉ Node.js)

Lược đồ: file://

const model = await tf.loadLayersModel('file://path/to/my-model/model.json');

Khi chạy trên Node.js, chúng tôi cũng có quyền truy cập trực tiếp vào hệ thống tệp và có thể tải các mô hình từ đó. Lưu ý rằng trong lệnh gọi hàm ở trên, chúng ta tham chiếu đến chính tệp model.json (trong khi khi lưu chúng ta chỉ định một thư mục). (Các) tệp .bin tương ứng phải nằm trong cùng thư mục với tệp json .

Tải mô hình với IOHandlers

Nếu các lược đồ trên không đủ cho nhu cầu của bạn, bạn có thể triển khai hành vi tải tùy chỉnh với IOHandler . Một IOHandler mà TensorFlow.js cung cấp là tf.io.browserFiles cho phép người dùng trình duyệt tải lên các tệp mô hình trong trình duyệt. Xem tài liệu để biết thêm thông tin.

Lưu và tải mô hình với IOHandlers tùy chỉnh

Nếu các lược đồ trên không đủ cho nhu cầu tải hoặc lưu của bạn, bạn có thể triển khai hành vi tuần tự hóa tùy chỉnh bằng cách triển khai IOHandler .

IOHandler là một đối tượng có phương thức saveload .

Hàm save nhận một tham số phù hợp với giao diện ModelArtifacts và sẽ trả về một lời hứa phân giải thành đối tượng SaveResult .

Hàm load không có tham số và sẽ trả về một lời hứa phân giải thành một đối tượng ModelArtifacts . Đây là cùng một đối tượng được chuyển qua để save .

Xem BrowserHTTPRequest để biết ví dụ về cách triển khai IOHandler.