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

Chuyển đổi mô hình

TensorFlow.js đi kèm với nhiều mô hình được đào tạo trước sẵn sàng sử dụng trong trình duyệt - bạn có thể tìm thấy chúng trong kho mô hình của chúng tôi. Tuy nhiên, bạn có thể đã tìm thấy hoặc tác giả một mô hình TensorFlow ở nơi khác mà bạn muốn sử dụng trong ứng dụng web của mình. TensorFlow.js cung cấp một trình chuyển đổi mô hình cho mục đích này. Bộ chuyển đổi TensorFlow.js có hai thành phần:

  1. Một tiện ích dòng lệnh chuyển đổi mô hình Keras và TensorFlow để sử dụng trong TensorFlow.js.
  2. Một API để tải và thực thi mô hình trong trình duyệt với TensorFlow.js.

Chuyển đổi mô hình của bạn

Công cụ chuyển đổi TensorFlow.js hoạt động với một số định dạng mô hình khác nhau:

SavedModel : Đây là định dạng mặc định để lưu các mô hình TensorFlow. Định dạng SavedModel được ghi lại ở đây .

Mô hình Keras : Các mô hình Keras thường được lưu dưới dạng tệp HDF5. Có thể tìm thêm thông tin về cách lưu các mô hình Keras tại đây .

Mô-đun TensorFlow Hub : Đây là các mô hình đã được đóng gói để phân phối trên TensorFlow Hub, một nền tảng để chia sẻ và khám phá các mô hình. Thư viện mô hình có thể được tìm thấy ở đây .

Tùy thuộc vào loại mô hình bạn đang cố gắng chuyển đổi, bạn sẽ cần chuyển các đối số khác nhau cho trình chuyển đổi. Ví dụ: giả sử bạn đã lưu một mô hình model.h5 có tên model.h5 vào tmp/ của bạn. Để chuyển đổi mô hình của bạn bằng trình chuyển đổi TensorFlow.js, bạn có thể chạy lệnh sau:

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

Thao tác này sẽ chuyển đổi mô hình tại /tmp/model.h5 và xuất tệp model.json cùng với tệp trọng số nhị phân vào tmp/tfjs_model/ .

Bạn có thể tìm thấy thêm chi tiết về các đối số dòng lệnh tương ứng với các định dạng mô hình khác nhau tại README của trình chuyển đổi TensorFlow.js.

Trong quá trình chuyển đổi, chúng tôi duyệt qua biểu đồ mô hình và kiểm tra xem mỗi hoạt động có được hỗ trợ bởi TensorFlow.js hay không. Nếu vậy, chúng tôi viết biểu đồ thành một định dạng mà trình duyệt có thể sử dụng. Chúng tôi cố gắng tối ưu hóa mô hình để được phục vụ trên web bằng cách chia nhỏ các trọng số thành các tệp 4MB - theo cách đó trình duyệt có thể lưu chúng vào bộ nhớ đệm. Chúng tôi cũng cố gắng đơn giản hóa biểu đồ mô hình bằng cách sử dụng dự án Grappler mã nguồn mở. Đơn giản hóa đồ thị bao gồm gấp các phép toán liền kề với nhau, loại bỏ các đồ thị con chung, v.v. Những thay đổi này không ảnh hưởng đến đầu ra của mô hình. Để tối ưu hóa hơn nữa, người dùng có thể chuyển đối số hướng dẫn bộ chuyển đổi lượng tử hóa mô hình thành một kích thước byte nhất định. Lượng tử hóa là một kỹ thuật để giảm kích thước mô hình bằng cách biểu diễn trọng số với ít bit hơn. Người dùng phải cẩn thận để đảm bảo rằng mô hình của họ duy trì mức độ chính xác có thể chấp nhận được sau khi lượng tử hóa.

Nếu chúng tôi gặp một hoạt động không được hỗ trợ trong quá trình chuyển đổi, quá trình này sẽ không thành công và chúng tôi sẽ in ra tên của hoạt động cho người dùng. Vui lòng gửi vấn đề trên GitHub của chúng tôi để cho chúng tôi biết về vấn đề đó - chúng tôi cố gắng triển khai các hoạt động mới để đáp ứng nhu cầu của người dùng.

Thực hành tốt nhất

Mặc dù chúng tôi cố gắng hết sức để tối ưu hóa mô hình của bạn trong quá trình chuyển đổi, nhưng cách tốt nhất để đảm bảo mô hình của bạn hoạt động tốt là xây dựng mô hình đó với các môi trường hạn chế tài nguyên. Điều này có nghĩa là tránh các kiến ​​trúc quá phức tạp và giảm thiểu số lượng tham số (trọng số) khi có thể.

Chạy mô hình của bạn

Sau khi chuyển đổi thành công mô hình của bạn, bạn sẽ kết thúc với một tập hợp các tệp trọng số và tệp cấu trúc liên kết mô hình. TensorFlow.js cung cấp các API tải mô hình mà bạn có thể sử dụng để tìm nạp các nội dung mô hình này và chạy suy luận trong trình duyệt.

Đây là giao diện của API cho mô-đun TensorFlow SavedModel hoặc TensorFlow Hub đã chuyển đổi:

const model = await tf.loadGraphModel(‘path/to/model.json’);

Và đây là những gì nó trông giống như một mô hình Keras được chuyển đổi:

const model = await tf.loadLayersModel(‘path/to/model.json’);

API tf.loadGraphModel trả về tf.FrozenModel , có nghĩa là các tham số đã được cố định và bạn sẽ không thể tinh chỉnh mô hình của mình bằng dữ liệu mới. API tf.loadLayersModel trả về tf.Model, có thể được đào tạo. Để biết thông tin về cách đào tạo tf.Model, hãy tham khảo hướng dẫn về mô hình đào tạo .

Sau khi chuyển đổi, bạn nên chạy suy luận một vài lần và đánh giá tốc độ mô hình của bạn. Chúng tôi có một trang đo điểm chuẩn độc lập có thể được sử dụng cho mục đích này: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Bạn có thể nhận thấy rằng chúng tôi loại bỏ các phép đo khỏi lần khởi động ban đầu - điều này là do (nói chung) suy luận đầu tiên của mô hình của bạn sẽ chậm hơn vài lần so với các suy luận tiếp theo do chi phí tạo kết cấu và biên dịch trình tạo bóng.