TensorFlow.js: Chuyển đổi Python SavedModel thành định dạng TensorFlow.js

1. Giới thiệu

Vậy là bạn đã thực hiện những bước đầu tiên với TensorFlow.js, dùng thử các mô hình được tạo sẵn hoặc thậm chí tự tạo mô hình. Tuy nhiên, bạn thấy một số nghiên cứu tiên tiến xuất hiện trong Python và bạn tò mò muốn biết liệu nghiên cứu đó có chạy trong trình duyệt web để biến ý tưởng hay của bạn thành hiện thực cho hàng triệu người theo cách có thể mở rộng hay không. Nghe có quen không? Nếu vậy, đây là Lớp học lập trình dành cho bạn!

Nhóm TensorFlow.js đã tạo ra một công cụ thuận tiện để chuyển đổi các mô hình ở định dạng SavedModel sang TensorFlow.js thông qua một trình chuyển đổi dòng lệnh. Nhờ đó, bạn có thể thoải mái sử dụng các mô hình như vậy với phạm vi tiếp cận và quy mô của web.

Kiến thức bạn sẽ học được

Trong lớp học lập trình này, bạn sẽ tìm hiểu cách sử dụng trình chuyển đổi dòng lệnh TensorFlow.js để chuyển một SavedModel do Python tạo sang định dạng model.json cần thiết để thực thi ở phía máy khách trong trình duyệt web.

Cụ thể:

  • Cách tạo một mô hình học máy Python đơn giản và lưu mô hình đó vào định dạng bắt buộc mà trình chuyển đổi TensorFlow.js cần.
  • Cách cài đặt và sử dụng bộ chuyển đổi TensorFlow.js trên SavedModel mà bạn đã xuất từ Python.
  • Lấy các tệp kết quả từ quá trình chuyển đổi và sử dụng trong ứng dụng web JS.
  • Tìm hiểu những việc cần làm khi có lỗi xảy ra (không phải mô hình nào cũng chuyển đổi) và những lựa chọn bạn có.

Hãy tưởng tượng bạn có thể lấy một số nghiên cứu mới phát hành và cung cấp mô hình đó cho hàng triệu nhà phát triển JS trên toàn cầu. Hoặc có thể bạn sẽ tự sử dụng tính năng này trong tác phẩm của riêng mình. Khi đó, bất kỳ ai trên thế giới cũng có thể trải nghiệm tác phẩm đó nếu tác phẩm chạy trong trình duyệt web, vì không cần các phần phụ thuộc phức tạp hoặc thiết lập môi trường. Bạn đã sẵn sàng bắt đầu khám phá? Bắt đầu!

Hãy chia sẻ với chúng tôi những nội dung bạn chuyển đổi!

Bạn có thể sử dụng những kiến thức học được hôm nay để thử chuyển đổi một số mô hình yêu thích của mình từ Python. Nếu bạn làm được và tạo được một trang web minh hoạ hoạt động của mô hình, hãy gắn thẻ chúng tôi trên mạng xã hội bằng hashtag #MadeWithTFJS để có cơ hội xuất hiện trên blog TensorFlow hoặc thậm chí là trong các sự kiện giới thiệu và chia sẻ trong tương lai. Chúng tôi rất mong chờ được thấy nhiều nghiên cứu tuyệt vời hơn được chuyển sang web và cho phép nhiều người hơn sử dụng các mô hình như vậy theo những cách sáng tạo hoặc đổi mới, giống như ví dụ tuyệt vời này.

2. TensorFlow.js là gì?

1aee0ede85885520.png

TensorFlow.js là một thư viện học máy nguồn mở có thể chạy ở bất cứ nơi nào có JavaScript. TensorFlow.js dựa trên thư viện TensorFlow ban đầu được viết bằng Python và nhằm mục đích tạo lại trải nghiệm của nhà phát triển cũng như bộ API này cho hệ sinh thái JavaScript.

Có thể sử dụng chế độ này ở đâu?

Nhờ tính di động của JavaScript, giờ đây, bạn có thể viết bằng 1 ngôn ngữ và thực hiện học máy trên tất cả các nền tảng sau đây một cách dễ dàng:

  • Phía máy khách trong trình duyệt web bằng JavaScript thuần
  • Phía máy chủ và thậm chí cả các thiết bị IoT như Raspberry Pi bằng Node.js
  • Ứng dụng dành cho máy tính sử dụng Electron
  • Ứng dụng di động gốc sử dụng React Native

TensorFlow.js cũng hỗ trợ nhiều chương trình phụ trợ trong mỗi môi trường này (môi trường dựa trên phần cứng thực tế mà chương trình có thể thực thi, chẳng hạn như CPU hoặc WebGL. "Phần phụ trợ" trong ngữ cảnh này không có nghĩa là môi trường phía máy chủ – phần phụ trợ để thực thi có thể là phía máy khách trong WebGL chẳng hạn) để đảm bảo khả năng tương thích và cũng giúp mọi thứ chạy nhanh. TensorFlow.js hiện hỗ trợ:

  • Thực thi WebGL trên thẻ đồ hoạ (GPU) của thiết bị – đây là cách nhanh nhất để thực thi các mô hình lớn hơn (có kích thước trên 3 MB) bằng tính năng tăng tốc GPU.
  • Thực thi Web Assembly (WASM) trên CPU – để cải thiện hiệu suất CPU trên các thiết bị, chẳng hạn như điện thoại di động thế hệ cũ. Điều này phù hợp hơn với các mô hình nhỏ hơn (kích thước dưới 3 MB) có thể thực sự thực thi nhanh hơn trên CPU bằng WASM so với WebGL do chi phí tải nội dung lên bộ xử lý đồ hoạ.
  • Thực thi CPU – dự phòng nếu không có môi trường nào khác. Đây là cách chậm nhất trong 3 cách nhưng luôn sẵn sàng hỗ trợ bạn.

Lưu ý: Bạn có thể chọn buộc một trong các chương trình phụ trợ này nếu biết thiết bị mà bạn sẽ thực thi hoặc bạn có thể chỉ cần để TensorFlow.js quyết định cho bạn nếu bạn không chỉ định chương trình phụ trợ.

Sức mạnh siêu phàm của phía máy khách

Việc chạy TensorFlow.js trong trình duyệt web trên máy khách có thể mang lại một số lợi ích đáng cân nhắc.

Quyền riêng tư

Bạn có thể huấn luyện và phân loại dữ liệu trên máy khách mà không cần gửi dữ liệu đến máy chủ web của bên thứ ba. Đôi khi, đây có thể là một yêu cầu để tuân thủ luật pháp địa phương, chẳng hạn như GDPR, hoặc khi xử lý bất kỳ dữ liệu nào mà người dùng có thể muốn lưu giữ trên máy của họ và không gửi cho bên thứ ba.

Speed

Vì bạn không phải gửi dữ liệu đến một máy chủ từ xa, nên quá trình suy luận (hành động phân loại dữ liệu) có thể diễn ra nhanh hơn. Thậm chí, bạn có thể truy cập trực tiếp vào các cảm biến của thiết bị như camera, micrô, GPS, gia tốc kế và nhiều cảm biến khác nếu người dùng cấp cho bạn quyền truy cập.

Phạm vi tiếp cận và quy mô

Chỉ bằng một cú nhấp chuột, bất kỳ ai trên thế giới đều có thể nhấp vào đường liên kết bạn gửi cho họ, mở trang web trong trình duyệt và sử dụng những gì bạn đã tạo. Bạn không cần thiết lập Linux phức tạp phía máy chủ bằng trình điều khiển CUDA và nhiều thứ khác chỉ để sử dụng hệ thống học máy.

Chi phí

Không có máy chủ nghĩa là bạn chỉ cần trả tiền cho một CDN để lưu trữ các tệp HTML, CSS, JS và mô hình. Chi phí của CDN rẻ hơn nhiều so với việc duy trì một máy chủ (có thể có gắn thẻ đồ hoạ) hoạt động 24/7.

Các tính năng phía máy chủ

Việc tận dụng việc triển khai Node.js của TensorFlow.js sẽ cho phép các tính năng sau.

Hỗ trợ đầy đủ CUDA

Về phía máy chủ, để tăng tốc bằng card đồ hoạ, bạn phải cài đặt trình điều khiển NVIDIA CUDA để cho phép TensorFlow hoạt động với card đồ hoạ (không giống như trong trình duyệt sử dụng WebGL – không cần cài đặt). Tuy nhiên, với khả năng hỗ trợ đầy đủ CUDA, bạn có thể tận dụng tối đa các khả năng ở cấp thấp của card đồ hoạ, giúp giảm thời gian huấn luyện và suy luận. Hiệu suất tương đương với việc triển khai TensorFlow bằng Python vì cả hai đều dùng chung một phần phụ trợ C++.

Kích thước mô hình

Đối với các mô hình tiên tiến từ nghiên cứu, bạn có thể làm việc với các mô hình rất lớn, có thể có kích thước lên đến hàng gigabyte. Hiện tại, bạn không thể chạy các mô hình này trong trình duyệt web do giới hạn về mức sử dụng bộ nhớ cho mỗi thẻ trình duyệt. Để chạy các mô hình lớn hơn này, bạn có thể sử dụng Node.js trên máy chủ của riêng mình với các thông số kỹ thuật phần cứng mà bạn cần để chạy mô hình đó một cách hiệu quả.

IOT

Node.js được hỗ trợ trên các máy tính bảng đơn phổ biến như Raspberry Pi. Điều này có nghĩa là bạn cũng có thể thực thi các mô hình TensorFlow.js trên những thiết bị như vậy.

Speed

Node.js được viết bằng JavaScript, tức là Node.js hưởng lợi từ quá trình biên dịch tức thì. Điều này có nghĩa là bạn có thể thường thấy hiệu suất tăng lên khi sử dụng Node.js vì nó sẽ được tối ưu hoá trong thời gian chạy, đặc biệt là đối với mọi hoạt động tiền xử lý mà bạn có thể đang thực hiện. Bạn có thể xem một ví dụ điển hình về điều này trong nghiên cứu điển hình này. Nghiên cứu này cho thấy cách Hugging Face sử dụng Node.js để tăng hiệu suất gấp 2 lần cho mô hình xử lý ngôn ngữ tự nhiên của họ.

Giờ đây, bạn đã hiểu những kiến thức cơ bản về TensorFlow.js, nơi có thể chạy và một số lợi ích, hãy bắt đầu làm những việc hữu ích với TensorFlow.js!

3. Thiết lập hệ thống

Trong hướng dẫn này, chúng ta sẽ sử dụng Ubuntu – một bản phân phối Linux phổ biến mà nhiều người dùng và có sẵn trên Compute Engine của Google Cloud dưới dạng hình ảnh cơ sở nếu bạn chọn làm theo trên một máy ảo dựa trên đám mây.

Tại thời điểm viết bài, chúng ta có thể chọn hình ảnh của Ubuntu 18.04.4 LTS khi tạo một phiên bản công cụ tính toán mới. Đây là phiên bản chúng ta sẽ sử dụng. Tất nhiên, bạn có thể sử dụng máy của riêng mình hoặc thậm chí là một hệ điều hành khác nếu muốn, nhưng hướng dẫn cài đặt và các phần phụ thuộc có thể khác nhau giữa các hệ thống.

Cài đặt TensorFlow (phiên bản Python)

Bây giờ, vì có thể bạn đang cố gắng chuyển đổi một số mô hình hiện có dựa trên Python mà bạn tìm thấy / sẽ viết, nên trước khi có thể xuất tệp "SavedModel" từ Python, bạn sẽ cần thiết lập phiên bản Python của TensorFlow trên phiên bản của mình nếu "SavedModel" chưa có sẵn để tải xuống.

SSH vào máy trên đám mây mà bạn đã tạo ở trên, sau đó nhập nội dung sau vào cửa sổ dòng lệnh:

Cửa sổ dòng lệnh:

sudo apt update
sudo apt-get install python3

Thao tác này sẽ đảm bảo chúng ta đã cài đặt Python 3 trên máy. Bạn phải cài đặt Python 3.4 trở lên để sử dụng TensorFlow.

Để xác minh rằng bạn đã cài đặt đúng phiên bản, hãy nhập nội dung sau:

Cửa sổ dòng lệnh:

python3 --version

Bạn sẽ thấy một số kết quả cho biết số phiên bản, chẳng hạn như Python 3.6.9. Nếu bạn thấy giá trị này được in chính xác và cao hơn 3,4, thì tức là bạn đã sẵn sàng tiếp tục.

Tiếp theo, chúng ta sẽ cài đặt PIP cho Python 3 (trình quản lý gói của Python) rồi cập nhật PIP. Loại:

Cửa sổ dòng lệnh:

sudo apt install python3-pip
pip3 install --upgrade pip

Một lần nữa, chúng ta có thể xác minh quá trình cài đặt pip3 thông qua:

Cửa sổ dòng lệnh:

pip3 --version

Tại thời điểm viết, chúng ta thấy pip 20.2.3 được in ra thiết bị đầu cuối sau khi thực thi lệnh này.

Trước khi có thể cài đặt TensorFlow, bạn cần có gói Python "setuptools" phiên bản 41.0.0 trở lên. Chạy lệnh sau để đảm bảo rằng bạn đã cập nhật lên phiên bản mới nhất:

Cửa sổ dòng lệnh:

pip3 install -U setuptools

Cuối cùng, giờ đây chúng ta có thể cài đặt TensorFlow cho Python:

Cửa sổ dòng lệnh:

pip3 install tensorflow

Quá trình này có thể mất chút thời gian để hoàn tất, vì vậy, vui lòng chờ cho đến khi quá trình thực thi kết thúc.

Hãy kiểm tra xem bạn đã cài đặt TensorFlow đúng cách hay chưa. Tạo một tệp Python có tên là test.py trong thư mục hiện tại:

Cửa sổ dòng lệnh:

nano test.py

Sau khi nano mở, chúng ta có thể viết một số mã Python để in phiên bản TensorFlow đã cài đặt:

test.py:

import tensorflow as tf
print(tf.__version__)

Nhấn CTRL + O để ghi các thay đổi vào đĩa rồi nhấn CTRL + X để thoát trình chỉnh sửa nano.

Giờ đây, chúng ta có thể chạy tệp Python này để xem phiên bản TensorFlow được in trên màn hình:

Cửa sổ dòng lệnh:

python3 test.py

Tại thời điểm viết bài, chúng ta thấy 2.3.1 được in vào bảng điều khiển cho phiên bản TensorFlow Python mà chúng ta đã cài đặt.

4. Tạo mô hình Python

Bước tiếp theo của lớp học lập trình này sẽ hướng dẫn bạn cách tạo một mô hình Python đơn giản để cho biết cách chúng ta có thể lưu mô hình đã huấn luyện thu được ở định dạng "SavedModel" để sau đó sử dụng với trình chuyển đổi dòng lệnh TensorFlow.js. Nguyên tắc này cũng tương tự đối với mọi mô hình Python mà bạn đang cố gắng chuyển đổi, nhưng chúng ta sẽ giữ cho mã này đơn giản để mọi người đều có thể hiểu được.

Hãy chỉnh sửa tệp test.py mà chúng ta đã tạo trong phần đầu tiên và cập nhật mã như sau:

test.py:

import tensorflow as tf
print(tf.__version__)

# Import NumPy - package for working with arrays in Python.
import numpy as np

# Import useful keras functions - this is similar to the
# TensorFlow.js Layers API functionality.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense

# Create a new dense layer with 1 unit, and input shape of [1].
layer0 = Dense(units=1, input_shape=[1])
model = Sequential([layer0])

# Compile the model using stochastic gradient descent as optimiser
# and the mean squared error loss function.
model.compile(optimizer='sgd', loss='mean_absolute_error')

# Provide some training data! Here we are using some fictional data 
# for house square footage and house price (which is simply 1000x the 
# square footage) which our model must learn for itself.
xs = np.array([800.0, 850.0, 900.0, 950.0, 980.0, 1000.0, 1050.0, 1075.0, 1100.0, 1150.0, 1200.0, 1250.0, 1300.0, 1400.0, 1500.0, 1600.0, 1700.0, 1800.0, 1900.0, 2000.0], dtype=float)

ys = np.array([800000.0, 850000.0, 900000.0, 950000.0, 980000.0, 1000000.0, 1050000.0, 1075000.0, 1100000.0, 1150000.0, 1200000.0,  1250000.0, 1300000.0, 1400000.0, 1500000.0, 1600000.0, 1700000.0, 1800000.0, 1900000.0, 2000000.0], dtype=float)

# Train the model for 500 epochs.
model.fit(xs, ys, epochs=500, verbose=0)

# Test the trained model on a test input value
print(model.predict([1200.0]))

# Save the model we just trained to the "SavedModel" format to the
# same directory our test.py file is located.
tf.saved_model.save(model, './')

Đoạn mã này sẽ huấn luyện một hồi quy tuyến tính rất đơn giản để tìm hiểu cách ước tính mối quan hệ giữa các x (đầu vào) và y (đầu ra) mà chúng ta cung cấp. Sau đó, chúng ta sẽ lưu mô hình đã huấn luyện thu được vào ổ đĩa. Hãy xem các nhận xét nội dòng để biết thêm thông tin chi tiết về chức năng của từng dòng.

Nếu kiểm tra thư mục sau khi chạy chương trình này (bằng cách gọi python3 test.py), giờ đây, chúng ta sẽ thấy một số tệp và thư mục mới được tạo trong thư mục hiện tại:

  • test.py
  • saved_model.pb
  • tài sản
  • biến

Giờ đây, chúng ta đã tạo ra các tệp cần thiết để trình chuyển đổi TensorFlow.js sử dụng nhằm chuyển đổi mô hình này để chạy trong trình duyệt!

5. Chuyển đổi SavedModel sang định dạng TensorFlow.js

Cài đặt trình chuyển đổi TensorFlow.js

Để cài đặt trình chuyển đổi, hãy chạy lệnh sau:

Cửa sổ dòng lệnh:

pip3 install tensorflowjs

Thật dễ dàng.

Giả sử chúng ta đang sử dụng trình chuyển đổi dòng lệnh (tensorflowjs_converter) chứ không phải phiên bản trình hướng dẫn như minh hoạ ở trên, chúng ta có thể gọi lệnh sau để chuyển đổi mô hình đã lưu mà chúng ta vừa tạo và truyền các tham số một cách rõ ràng đến trình chuyển đổi:

Cửa sổ dòng lệnh:

tensorflowjs_converter \
    --input_format=keras_saved_model \
    ./ \
    ./predict_houses_tfjs

Chuyện gì đang xảy ra ở đây? Trước tiên, chúng ta sẽ gọi tệp nhị phân tensorflowjs_converter mà chúng ta vừa cài đặt và chỉ định rằng chúng ta đang cố gắng chuyển đổi một mô hình đã lưu của Keras.

Trong mã ví dụ ở trên, bạn sẽ thấy chúng ta đã nhập keras và dùng các API lớp cấp cao hơn của keras để tạo mô hình. Nếu chưa sử dụng keras trong mã Python, bạn có thể muốn sử dụng một định dạng đầu vào khác:

  • keras – để tải định dạng keras (loại tệp HDF5)
  • tf_saved_model – để tải mô hình sử dụng các API cốt lõi của TensorFlow thay vì Keras.
  • tf_frozen_model – để tải một mô hình có chứa các trọng số cố định.
  • tf_hub – để tải một mô hình được tạo từ tensorflow hub.

Bạn có thể tìm hiểu thêm về các định dạng khác này tại đây.

2 tham số tiếp theo chỉ định thư mục chứa mô hình đã lưu – trong bản minh hoạ ở trên, chúng ta chỉ định thư mục hiện tại, sau đó cuối cùng chúng ta chỉ định thư mục mà chúng ta muốn chuyển đổi thành, mà chúng ta chỉ định ở trên là một thư mục có tên "predict_houses_tfjs" trong thư mục hiện tại.

Khi chạy lệnh trên, một thư mục mới có tên predict_houses_tfjs sẽ được tạo trong thư mục hiện tại. Thư mục này chứa :

  • model.json
  • Group1-shard1of1.bin

Đây là những tệp chúng ta cần để chạy mô hình trong trình duyệt web. Hãy lưu các tệp này vì chúng ta sẽ sử dụng chúng trong phần tiếp theo.

6. Sử dụng mô hình đã chuyển đổi của chúng tôi trong trình duyệt

Lưu trữ các tệp đã chuyển đổi

Trước tiên, chúng ta phải đặt tệp model.json và tệp *.bin đã được tạo trên một máy chủ web để có thể truy cập vào các tệp đó thông qua trang web của mình. Trong bản minh hoạ này, chúng ta sẽ sử dụng Glitch.com để bạn dễ dàng theo dõi. Tuy nhiên, nếu có kiến thức về kỹ thuật web, bạn có thể chọn khởi động một máy chủ http đơn giản trên phiên bản máy chủ Ubuntu hiện tại để thực hiện việc này. Quyền quyết định là ở bạn!

Tải tệp lên Glitch

  1. Đăng nhập vào Glitch.com
  2. Sử dụng đường liên kết này để Sao chép dự án TensorFlow.js mẫu của chúng tôi. Thư mục này chứa các tệp html, css và js cơ bản nhập thư viện TensorFlow.js để chúng ta có thể sử dụng ngay.
  3. Nhấp vào thư mục "assets" (thành phần) trong bảng điều khiển bên trái.
  4. Nhấp vào "tải một thành phần lên" rồi chọn group1-shard1of1.bin để tải lên thư mục này. Sau khi tải lên, tệp sẽ có dạng như sau: 25a2251c7f165184.png
  5. Nếu nhấp vào tệp group1-shard1of1.bin mà bạn vừa tải lên, bạn sẽ có thể sao chép URL đến vị trí của tệp đó. Sao chép đường dẫn này ngay bây giờ như minh hoạ: 92ded8d46442c404.png
  6. Bây giờ, hãy chỉnh sửa model.json bằng trình chỉnh sửa văn bản mà bạn yêu thích trên máy cục bộ và tìm kiếm (bằng cách nhấn tổ hợp phím CTRL+F) tệp group1-shard1of1.bin. Tệp này sẽ được đề cập ở đâu đó trong đó.

Thay thế tên tệp này bằng URL mà bạn đã sao chép ở bước 5, nhưng hãy xoá https://cdn.glitch.com/ ở đầu mà Glitch tạo từ đường dẫn đã sao chép.

Sau khi chỉnh sửa, tệp sẽ có dạng như sau (lưu ý cách đường dẫn máy chủ chính đã bị xoá để chỉ giữ lại tên tệp đã tải lên): d5a338f2dc1f31d4.png 7. Bây giờ, hãy lưu và tải tệp model.json đã chỉnh sửa này lên glitch bằng cách nhấp vào thành phần, sau đó nhấp vào nút "tải thành phần lên" (quan trọng). Nếu bạn không sử dụng nút vật lý và kéo rồi thả, thì tệp sẽ được tải lên dưới dạng tệp có thể chỉnh sửa thay vì trên CDN. Tệp này sẽ không nằm trong cùng một thư mục và đường dẫn tương đối được giả định khi TensorFlow.js cố gắng tải các tệp nhị phân xuống cho một mô hình nhất định. Nếu thực hiện đúng, bạn sẽ thấy 2 tệp trong thư mục assets như sau: 51a6dbd5d3097ffc.png

Tuyệt vời! Giờ đây, chúng ta đã sẵn sàng sử dụng các tệp đã lưu bằng một số mã thực tế trong trình duyệt.

Đang tải mô hình

Giờ đây, sau khi lưu trữ các tệp đã chuyển đổi, chúng ta có thể viết một trang web đơn giản để tải các tệp này và dùng chúng để đưa ra dự đoán. Mở script.js trong thư mục dự án Glitch rồi thay thế nội dung của tệp này bằng nội dung sau khi bạn đã thay đổi const MODEL_URL để trỏ đến đường liên kết Glitch.com đã tạo cho tệp model.json mà bạn tải lên Glitch:

script.js:

// Grab a reference to our status text element on the web page.
// Initially we print out the loaded version of TFJS.
const status = document.getElementById('status');
status.innerText = 'Loaded TensorFlow.js - version: ' + tf.version.tfjs;

// Specify location of our Model.json file we uploaded to the Glitch.com CDN.
const MODEL_URL = YOUR MODEL.JSON URL HERE! CHANGE THIS!';
// Specify a test value we wish to use in our prediction.
// Here we use 950, so we expect the result to be close to 950,000.
const TEST_VALUE = 950.0

// Create an asynchronous function.
async function run() {
    // Load the model from the CDN.
    const model = await tf.loadLayersModel(MODEL_URL);

    // Print out the architecture of the loaded model.
    // This is useful to see that it matches what we built in Python.
    console.log(model.summary());

    // Create a 1 dimensional tensor with our test value.
    const input = tf.tensor1d([TEST_VALUE]);

    // Actually make the prediction.
    const result = model.predict(input);

    // Grab the result of prediction using dataSync method
    // which ensures we do this synchronously.
    status.innerText = 'Input of ' + TEST_VALUE + 
        'sqft predicted as $' + result.dataSync()[0];
}

// Call our function to start the prediction!
run();

Khi chạy mã trên sau khi bạn thay đổi hằng số MODEL_URL để trỏ đến đường dẫn model.json, bạn sẽ nhận được đầu ra như minh hoạ bên dưới.

c5e8457213058ec3.png

Nếu kiểm tra bảng điều khiển của trình duyệt web (Nhấn F12 để mở công cụ cho nhà phát triển trong trình duyệt), chúng ta cũng có thể thấy nội dung mô tả mô hình cho mô hình đã tải, nội dung này sẽ in:

35e79d70dbd66f27.png

Khi so sánh với mã Python ở đầu lớp học lập trình này, chúng ta có thể xác nhận rằng đây là mạng lưới mà chúng ta đã tạo bằng 1 đầu vào dày đặc và 1 lớp dày đặc có 1 nút.

Xin chúc mừng! Bạn vừa chạy một mô hình được huấn luyện bằng Python đã chuyển đổi trong trình duyệt web!

7. Các mô hình không chuyển đổi

Sẽ có những trường hợp các mô hình phức tạp hơn được biên dịch để sử dụng các thao tác ít phổ biến sẽ không được hỗ trợ để chuyển đổi. Phiên bản dựa trên trình duyệt của TensorFlow.js là một bản viết lại hoàn chỉnh của TensorFlow. Do đó, hiện tại, chúng tôi không hỗ trợ tất cả các thao tác cấp thấp mà TensorFlow C++ API có (có hàng nghìn thao tác) – mặc dù theo thời gian, chúng tôi sẽ thêm nhiều thao tác hơn khi phát triển và khi các thao tác cốt lõi trở nên ổn định hơn.

Tại thời điểm viết, một hàm như vậy trong TensorFlow Python tạo ra một thao tác không được hỗ trợ khi được xuất dưới dạng savedmodel là linalg.diag. Nếu cố gắng chuyển đổi một savedmodel sử dụng hàm này trong Python (hàm này có hỗ trợ các thao tác kết quả mà hàm tạo ra), chúng ta sẽ thấy một lỗi tương tự như lỗi bên dưới:

5df94fc652393e00.png

Ở đây, chúng ta có thể thấy được đánh dấu màu đỏ rằng lệnh gọi linalg.diag đã được biên dịch để tạo ra một op có tên là MatrixDiagV3. op này không được hỗ trợ bởi TensorFlow.js trong trình duyệt web tại thời điểm viết lớp học lập trình này.

Việc nên làm

Bạn có 2 lựa chọn.

  1. Triển khai thao tác còn thiếu này trong TensorFlow.js – chúng tôi là một dự án nguồn mở và hoan nghênh các đóng góp cho những việc như thao tác mới. Tham khảo hướng dẫn này về cách viết các hoạt động mới cho TensorFlow.js. Nếu làm được việc này, bạn có thể sử dụng cờ Skip_op_check trên trình chuyển đổi dòng lệnh của chúng tôi để bỏ qua lỗi này và tiếp tục chuyển đổi bằng mọi cách (trình chuyển đổi sẽ giả định rằng op này có trong bản dựng TensorFlow.js mới mà bạn đã tạo có hỗ trợ op bị thiếu).
  2. Xác định phần nào trong mã Python của bạn đã tạo ra thao tác không được hỗ trợ trong tệp savedmodel mà bạn đã xuất. Trong một tập hợp nhỏ mã, bạn có thể dễ dàng xác định vị trí này, nhưng trong các mô hình phức tạp hơn, bạn có thể phải điều tra khá nhiều vì hiện không có phương thức nào để xác định lệnh gọi hàm Python cấp cao đã tạo ra một op nhất định sau khi ở định dạng tệp savedmodel. Tuy nhiên, sau khi xác định được, bạn có thể thay đổi phương thức này để sử dụng một phương thức khác được hỗ trợ.

8. Xin chúc mừng

Xin chúc mừng! Bạn đã thực hiện những bước đầu tiên trong việc sử dụng một mô hình Python thông qua TensorFlow.js trong trình duyệt web!

Tóm tắt

Trong lớp học lập trình này, chúng ta đã tìm hiểu cách:

  1. Thiết lập môi trường Linux để cài đặt TensorFlow dựa trên Python
  2. Xuất "SavedModel" của Python
  3. Cài đặt trình chuyển đổi dòng lệnh TensorFlow.js
  4. Sử dụng trình chuyển đổi dòng lệnh TensorFlow.js để tạo các tệp phía máy khách cần thiết
  5. Sử dụng các tệp đã tạo trong ứng dụng web thực
  6. Xác định những mô hình sẽ không chuyển đổi và những gì cần triển khai để cho phép chúng chuyển đổi trong tương lai.

Tiếp theo là gì?

Đừng quên gắn thẻ chúng tôi trong mọi nội dung bạn tạo bằng #MadeWithTFJS để có cơ hội xuất hiện trên mạng xã hội hoặc thậm chí được giới thiệu tại các sự kiện TensorFlow trong tương lai. Chúng tôi rất mong được thấy những gì bạn chuyển đổi và sử dụng phía máy khách trong trình duyệt!

Các lớp học lập trình khác về TensorFlow.js để tìm hiểu sâu hơn

Các trang web cần xem