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

1. Giới thiệu

Bạn đã thực hiện những bước đầu tiên với TensorFlow.js, thử các mô hình được tạo sẵn hoặc thậm chí có thể tự tạo ra. Tuy nhiên, bạn đã thấy một số nghiên cứu tiên tiến về Python và bạn tò mò muốn biết liệu công nghệ này có được chạy trong trình duyệt web để biến ý tưởng tuyệt vời mà bạn đã trở thành hiện thực cho hàng triệu người bằng cách có thể mở rộng hay không. Bạn có quen thuộc không? Nếu đúng thì đâ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ụ tiện lợi để 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ể 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 trang 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 trên 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à bộ chuyển đổi TensorFlow.js cần.
  • Cách cài đặt và sử dụng trình 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ừ việc chuyển đổi và sử dụng trong ứng dụng web JS của bạn.
  • Biết được cần làm gì khi có sự cố (không phải tất cả mô hình đều chuyển đổi) và những lựa chọn dành cho bạn.

Hãy tưởng tượng rằng bạn có thể thực hiện 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ự mình sử dụng công cụ này trong sáng tạo của riêng mình. Đây là điều mà bất kỳ ai trên thế giới cũng có thể trải nghiệm nếu công cụ này chạy trong trình duyệt web, vì không cần phải thiết lập môi trường hay phụ thuộc phức tạp. Bạn đã sẵn sàng để tấn công? Bắt đầu!

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

Bạn có thể sử dụng những gì chúng ta tìm hiểu hôm nay để thử và chuyển đổi một số mô hình mà bạn yêu thích từ Python. Nếu bạn có thể triển khai thành công một trang web minh hoạ của mô hình này trong thực tế, 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 nổi bật trên blog của TensorFlow hoặc thậm chí là các sự kiện trình chiếu và kể chuyện trong tương lai. Chúng tôi rất mong có thể thấy được nhiều nghiên cứu tuyệt vời hơn được chuyển tới web và cho phép nhiều người sử dụng những mô hình như vậy theo những cách đổi mới hoặc sáng tạo như ví dụ tuyệt vời này.

2. TensorFlow.js là gì?

1aee0ede85885520.pngS

TensorFlow.js là một thư viện máy học nguồn mở có thể chạy ở mọi nơi mà JavaScript có thể. Thư viện này 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 này cũng như bộ API cho nhà phát triển cho hệ sinh thái JavaScript.

Có thể sử dụng ở đâu?

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

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

TensorFlow.js cũng hỗ trợ nhiều phần phụ trợ trong mỗi môi trường này (ví dụ: môi trường dựa trên phần cứng mà công cụ này có thể thực thi trong CPU hoặc WebGL. Một "máy chủ phụ trợ" trong trường hợp 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) để đảm bảo khả năng tương thích và giúp mọi thứ chạy nhanh. Hiện tại, TensorFlow.js 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 (kích thước trên 3 MB) bằng tính năng tăng tốc GPU.
  • Thực thi Web hội (WASM) trên CPU – để cải thiện hiệu suất của 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) thực sự có thể 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ý đồ họa.
  • Thực thi CPU – mô hình dự phòng không được có sẵn trong môi trường nào khác. Đây là tốc độ chậm nhất trong ba thử nghiệm nhưng luôn ở bên bạn.

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

Siêu năng lực 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ể vừa huấn luyện vừa 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à yêu cầu về việc tuân thủ luật đị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 trên máy của mình 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áy chủ từ xa nên suy luận (hoạt động phân loại dữ liệu) có thể nhanh hơn. Hơn nữa, bạn có quyền truy cập trực tiếp vào các cảm biến của thiết bị như máy ảnh, micrô, GPS, gia tốc kế và các 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ỉ với một cú nhấp chuột, bất kỳ ai trên thế giới cũng có thể nhấp vào liên kết bạn gửi cho họ, mở trang web trong trình duyệt của họ và sử dụng những gì bạn đã tạo. Không cần phải thiết lập Linux phía máy chủ phức tạp bằng trình điều khiển CUDA và nhiều công việc 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 để có một CDN để lưu trữ các tệp HTML, CSS, JS và mô hình của mình. Chi phí của một CDN rẻ hơn nhiều so với việc duy trì một máy chủ (có thể có kèm theo thẻ đồ hoạ) chạy 24/7.

Tính năng phía máy chủ

Việc tận dụng phương thức triển khai Node.js của TensorFlow.js sẽ giúp các tính năng sau hoạt động.

Hỗ trợ đầy đủ CUDA

Về phía máy chủ, để tăng tốc thẻ đồ 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 thẻ đồ 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 sự hỗ trợ CUDA đầy đủ, bạn hoàn toàn có thể tận dụng các khả năng cấp thấp hơn của thẻ đồ hoạ, nhờ đó rút ngắn thời gian huấn luyện và suy luận. Hiệu suất tương đương với quá trình triển khai TensorFlow của Python vì cả hai đều có cùng phần phụ trợ C++.

Quy mô mô hình

Để biết 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 gigabyte. Các mô hình này hiện không thể chạy trong trình duyệt web do hạn chế về việc sử dụng bộ nhớ trên 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 thông số kỹ thuật phần cứng mà bạn cần để chạy mô hình như vậy 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, theo đó, 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, có nghĩa là ứng dụng này được hưởng lợi từ việc biên dịch kịp thời. Điều này có nghĩa là bạn thường có thể nhận thấy mức tăng hiệu suất khi sử dụng Node.js vì Node.js sẽ được tối ưu hoá trong thời gian chạy, đặc biệt là đối với bất kỳ quá trình xử lý trước nào 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, trong đó 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ọ.

Bây giờ, bạn đã nắm được những thông tin cơ bản về TensorFlow.js (nơi mã 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!

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

Trong hướng dẫn này, chúng tôi sẽ sử dụng Ubuntu – một bản phân phối Linux phổ biến mà nhiều người sử dụng và có sẵn trên Google Cloud Compute Engine làm hình ảnh cơ bản nếu bạn chọn tiếp tục trên máy ảo 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 vanilla 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 bạn muốn làm như vậy, tuy nhiên hướng dẫn cài đặt và 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 dựa trên Python hiện có mà bạn đã tìm thấy / hoặc sẽ viết, trước khi chúng ta có thể xuất một "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 giá trị "SavedModel" chưa có sẵn để tải xuống.

SSH vào máy đá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

Việc này đả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.

Để kiểm tra nhằm đảm bảo bạn đã cài đặt đúng phiên bản, hãy nhập thông tin 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 bản in này chính xác và cao hơn 3.4, chúng tôi 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 và sau đó 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 việc cài đặt pip3 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 cửa sổ dòng lệnh sau khi thực thi lệnh này.

Trước khi có thể cài đặt TensorFlow, chúng ta phải có gói "setuptools" Python phiên bản 41.0.0 trở lên. Chạy lệnh sau đây để đảm bảo lệnh được 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

Có thể mất chút thời gian để hoàn tất, vì vậy, vui lòng đợi cho đến khi thực thi xong.

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

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

nano test.py

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

test.py:

import tensorflow as tf
print(tf.__version__)

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

Bây giờ, chúng ta có thể chạy tệp Python này để xem phiên bản TensorFlow được in lê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 tôi thấy 2.3.1 được in ra bảng điều khiển cho phiên bản TensorFlow Python được 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 cách tạo một mô hình Python đơn giản để cho thấy cách chúng ta có thể lưu mô hình đã huấn luyện này trong "SavedModel" để sử dụng với trình chuyển đổi dòng lệnh TensorFlow.js của chúng tôi. Nguyên tắc này cũng tương tự như đối với bất kỳ mô hình Python nào mà bạn đang cố gắng chuyển đổi, nhưng chúng ta sẽ đơn giản hoá mã này để 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, './')

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 x (đầu vào) và y (đầu ra) được cung cấp. Sau đó, chúng ta sẽ lưu mô hình đã huấn luyện vào ổ đĩa. Xem nhận xét cùng dòng để biết thêm thông tin về chức năng của mỗi dòng.

Nếu chúng ta 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), thì 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

Hiện tại, chúng tôi đã tạo các tệp cần thiết cho trình chuyển đổi TensorFlow.js để chuyển đổi mô hình này và chạy trong trình duyệt!

5. Chuyển đổi SavedModel thành đị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 nêu 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à chuyển các tham số đến trình chuyển đổi một cách rõ ràng:

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

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

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

Trong mã ví dụ ở trên, bạn sẽ lưu ý rằng chúng tôi đã nhập kera và sử dụng các API lớp cấp cao hơn để tạo mô hình của mình. Nếu chưa từng sử dụng keras trong mã Python, bạn có thể muốn sử dụng một định dạng nhập 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 API lõi tensorflow thay vì keras.
  • tf_frozen_model – để tải một mô hình có chứa trọng số cố định.
  • tf_hub – để tải mô hình được tạo từ trung tâm tensorflow.

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 và cuối cùng chỉ định thư mục mà chúng ta muốn xuất chuyển đổi, thư mục mà chúng ta chỉ định ở trên là thư mục có tên là "predict_houses_tfjs" trong thư mục hiện tại.

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

  • model.json
  • Group1-shard1of1.bin

Đây là những tệp mà chúng ta cần để chạy mô hình trong trình duyệt web. Lưu các tệp này lại 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 các tệp model.json*.bin đã được tạo trên máy chủ web để có thể truy cập các tệp này qua trang web của mình. Đối với bản minh hoạ này, chúng tôi sẽ sử dụng Glitch.com để bạn dễ dàng theo dõi. Tuy nhiên, nếu có chuyên môn về kỹ thuật web, bạn có thể chọn kích hoạt 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 nguyên mẫu của chúng tôi. Tệp này chứa các tệp html, css và js khung. Các tệp này nhập thư viện TensorFlow.js để chúng tôi sẵn sàng sử dụng.
  3. Nhấp vào "thành phần" trong bảng điều khiển bên trái.
  4. Nhấp vào "tải thành phần lên" và 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.pngS
  5. Nếu nhấp vào tệp group1-shard1of1.bin bạn vừa tải lên, bạn có thể sao chép URL vào vị trí của tệp đó. Sao chép đường dẫn này ngay bây giờ như minh hoạ: 92d8d46442c404.pngs
  6. Bây giờ, hãy chỉnh sửa model.json bằng trình chỉnh sửa văn bản yêu thích của bạn trên máy cục bộ và tìm kiếm (bằng tổ hợp phím Ctrl+F) cho tệp group1-shard1of1.bin sẽ được đề cập ở đâu đó trong tệp.

Hãy thay thế tên tệp này bằng URL mà bạn đã sao chép ở bước 5, nhưng xoá https://cdn.glitch.com/ ở đầu mà sự cố tạo ra khỏi đường dẫn đã sao chép.

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

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

Tải mô hình

Giờ đây, 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 những tệp này và sử dụng chúng để đưa ra dự đoán. Mở script.js trong thư mục dự án Glitch và thay thế nội dung của tệp này bằng nội dung sau đây 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 trê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();

Chạy mã trên sau khi bạn thay đổi hằng số MODEL_URL để trỏ đến đường dẫn model.json, thì kết quả như sau.

c5e8457213058ec3.png

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

35e79d70dbd66f27.pngS

So sánh nội dung này 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 chính là mạng mà chúng ta đã tạo với 1 đầu vào dày đặc và một 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 huấn luyện Python chuyển đổi trong trình duyệt web!

7. Mô hình không chuyển đổi

Đôi khi, các mô hình phức tạp hơn sẽ được biên dịch để sử dụng các thao tác ít phổ biến hơ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 toàn của TensorFlow và do đó, chúng tôi hiện không hỗ trợ tất cả các hoạt động cấp thấp mà API TensorFlow C++ có (có 1.000 giây). Tuy nhiên, theo thời gian, nhiều hoạt động cốt lõi hơn được bổ sung khi chúng ta phát triển và khi các hoạt động cốt lõi trở nên ổn định hơn.

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

5df94fc652393e00.pngS

Ở đây, chúng ta có thể thấy lệnh gọi linalg.diag được biên dịch xuống để tạo ra một hoạt động có tên MatrixDiagV3 mà TensorFlow.js không hỗ trợ 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 hoạt động còn thiếu này trong TensorFlow.js – chúng tôi là một dự án nguồn mở và rất mong nhận được đóng góp cho những hoạt động như hoạt động mới. Hãy xem hướng dẫn này về cách viết hoạt động mới cho TensorFlow.js. Nếu có thể 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 để bỏ qua lỗi này và tiếp tục chuyển đổi bằng mọi cách (hệ thống sẽ giả định rằng op này có sẵn trong bản dựng TensorFlow.js mà bạn đã tạo có hỗ trợ hoạt động bị thiếu).
  2. Hãy xác định phần mã Python nào đã 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 mã nhỏ, mã này có thể dễ dàng xác định vị trí, 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 chưa có phương pháp nào để xác định lệnh gọi hàm Python cấp cao tạo ra một hoạt động nhất định một lần ở định dạng tệp savedmodel. Tuy nhiên, sau khi xác định được vị trí, bạn có thể thay đổi chế độ cài đặt 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 để sử dụng mô hình Python qua TensorFlow.js trên 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 tệp "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 bắt buộc
  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 mô hình cần được triển khai để có thể chuyển đổi trong tương lai.

Tiếp theo là gì?

Đừng quên gắn thẻ chúng tôi vào bất kỳ nội dung nào bạn tạo bằng cách sử dụng hashtag #MadeWithTFJS để có cơ hội xuất hiện trên mạng xã hội hoặc thậm chí là xuất hiện tại các sự kiện của TensorFlow trong tương lai. Chúng tôi muốn 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

Trang web nên thanh toán