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ạo 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 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. Tiện ích dòng lệnh chuyển đổi mô hình Keras và TensorFlow để sử dụng trong TensorFlow.js.
  2. API để tải và thực thi mô hình trong trình duyệt bằng TensorFlow.js.

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

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

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

Mô hình máy ảnh : Các mô hình máy ảnh thường được lưu dưới dạng tệp HDF5. Thông tin thêm về việc lưu các mô hình Keras có thể được tìm thấy ở đâ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ô hình Keras có tên model.h5 vào thư mục tmp/ của mình. Để 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

Điều này sẽ chuyển đổi mô hình tại /tmp/model.h5 và xuất ra tệp model.json cùng với các tệp trọng số nhị phân vào thư mục tmp/tfjs_model/ của bạn.

Bạn có thể tìm thêm thông tin 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 từng thao tác có được TensorFlow.js hỗ trợ hay không. Nếu vậy, chúng tôi viết biểu đồ thành đị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ân phát trên web bằng cách chia nhỏ trọng lượng thành các tệp 4 MB - theo cách đó chúng có thể được trình duyệt lưu 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 nguồn mở. Đơn giản hóa đồ thị bao gồm việc gấp các hoạt động liền kề lại 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 vào một đố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 các 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 phải một thao tác không được hỗ trợ trong quá trình chuyển đổi, quy trình sẽ không thành công và chúng tôi sẽ in ra tên của thao tác đó 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.

Các phương pháp hay 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 môi trường hạn chế về 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ẽ có một tập hợp các tệp trọng lượng 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 đối với mô-đun TensorFlow SavingModel hoặc TensorFlow Hub đã chuyển đổi:

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

Và đây là kết quả của 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ề một 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 xe lửa .

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 mình. 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 chạy 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 những suy luận tiếp theo do chi phí tạo kết cấu và biên dịch trình đổ bóng.