Trang này mô tả cách chuyển đổi mô hình TensorFlow
sang mô hình LiteRT (một mô hình được tối ưu hoá
Định dạng FlatBuffer được xác định bởi
.tflite
) bằng cách sử dụng bộ chuyển đổi LiteRT.
Quy trình chuyển đổi
Biểu đồ dưới đây minh hoạ quy trình tổng thể để chuyển đổi mô hình của bạn:
Hình 1. Quy trình của trình chuyển đổi.
Bạn có thể chuyển đổi mô hình của mình bằng một trong các cách sau:
- API Python (nên dùng): Điều này cho phép bạn tích hợp lượt chuyển đổi vào quy trình phát triển, áp dụng các cách tối ưu hoá, thêm siêu dữ liệu và nhiều tác vụ khác giúp đơn giản hoá quá trình chuyển đổi.
- Dòng lệnh: Dòng lệnh này chỉ hỗ trợ chuyển đổi mô hình cơ bản.
API Python
Mã trợ giúp: Để tìm hiểu thêm về trình chuyển đổi LiteRT
API, chạy print(help(tf.lite.TFLiteConverter))
.
Chuyển đổi mô hình TensorFlow bằng
tf.lite.TFLiteConverter
.
Mô hình TensorFlow được lưu trữ bằng định dạng SavedModel và
được tạo bằng API tf.keras.*
cấp cao (mô hình Keras) hoặc
các API tf.*
cấp thấp (từ đó bạn tạo các hàm cụ thể). Là một
kết quả, bạn có 3 lựa chọn sau đây (ví dụ là trong vài video tiếp theo
chuyên mục):
tf.lite.TFLiteConverter.from_saved_model()
(khuyến nghị): Chuyển đổi một SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: Chuyển đổi a Mô hình Keras.tf.lite.TFLiteConverter.from_concrete_functions()
: Chuyển đổi các hàm cụ thể.
Chuyển đổi SavedModel (nên dùng)
Ví dụ sau đây trình bày cách chuyển đổi SavedModel được đưa vào TensorFlow Mô hình thu gọn.
import tensorflow as tf
# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) # path to the SavedModel directory
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
Chuyển đổi mô hình Keras
Ví dụ sau đây trình bày cách chuyển đổi Mô hình Keras trên TensorFlow Mô hình thu gọn.
import tensorflow as tf
# Create a model using high-level tf.keras.* APIs
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(units=1, input_shape=[1]),
tf.keras.layers.Dense(units=16, activation='relu'),
tf.keras.layers.Dense(units=1)
])
model.compile(optimizer='sgd', loss='mean_squared_error') # compile the model
model.fit(x=[-1, 0, 1], y=[-3, -1, 1], epochs=5) # train the model
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_keras_dir")
# Convert the model.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
Chuyển đổi các hàm cụ thể
Ví dụ sau đây trình bày cách chuyển đổi các hàm cụ thể vào một Mô hình LiteRT.
import tensorflow as tf
# Create a model using low-level tf.* APIs
class Squared(tf.Module):
@tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.float32)])
def __call__(self, x):
return tf.square(x)
model = Squared()
# (ro run your model) result = Squared(5.0) # This prints "25.0"
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_tf_dir")
concrete_func = model.__call__.get_concrete_function()
# Convert the model.
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func],
model)
tflite_model = converter.convert()
# Save the model.
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
Tính năng khác
Áp dụng tính năng tối ưu hoá. Điểm chung tối ưu hoá được sử dụng là định lượng sau đào tạo, Tính năng này có thể giảm thêm độ trễ và kích thước của mô hình mà không khiến sự chính xác.
Thêm siêu dữ liệu để tạo nền tảng dễ dàng hơn mã trình bao bọc cụ thể khi triển khai các mô hình trên thiết bị.
Lỗi chuyển đổi
Sau đây là các lỗi chuyển đổi phổ biến và cách khắc phục:
Lỗi:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.
Giải pháp: Lỗi xảy ra khi mô hình của bạn có hoạt động TF không có TFLite tương ứng. Bạn có thể giải quyết vấn đề này bằng cách bằng cơ chế hoạt động TF trong mô hình TFLite (khuyến nghị). Nếu chỉ muốn tạo mô hình bằng hoạt động TFLite, bạn có thể thêm yêu cầu hoạt động TFLite bị thiếu trong Vấn đề GitHub #21526 (để lại nhận xét nếu yêu cầu của bạn chưa được đề cập) hoặc tạo hoạt động TFLite chính bạn.
Lỗi:
.. is neither a custom op nor a flex op
Giải pháp: Nếu TF này là:
Được hỗ trợ trong TF: Lỗi xảy ra do thiếu hoạt động TF trong danh sách cho phép (danh sách đầy đủ các Hoạt động TF được TFLite hỗ trợ). Bạn có thể giải quyết vấn đề này như sau:
Không được hỗ trợ trong TF: Lỗi xảy ra vì TFLite không nhận biết được toán tử TF tuỳ chỉnh do bạn xác định. Bạn có thể giải quyết vấn đề này như sau:
- Tạo cơ chế TF.
- Chuyển đổi mô hình TF sang mô hình TFLite.
- Tạo hoạt động TFLite và chạy suy luận bằng cách liên kết nó với môi trường thời gian chạy TFLite.
Công cụ dòng lệnh
Nếu bạn đã
đã cài đặt TensorFlow 2.x từ pip, hãy sử dụng
lệnh tflite_convert
. Để xem tất cả cờ hiện có, hãy sử dụng
sau đây:
$ tflite_convert --help
`--output_file`. Type: string. Full path of the output file.
`--saved_model_dir`. Type: string. Full path to the SavedModel directory.
`--keras_model_file`. Type: string. Full path to the Keras H5 model file.
`--enable_v1_converter`. Type: bool. (default False) Enables the converter and flags used in TF 1.x instead of TF 2.x.
You are required to provide the `--output_file` flag and either the `--saved_model_dir` or `--keras_model_file` flag.
Nếu bạn có
Nguồn TensorFlow 2.x
không được tải và muốn chạy trình chuyển đổi từ nguồn đó mà không cần tạo và
cài đặt gói,
bạn có thể thay thế 'tflite_convert
' thông qua tính năng
"bazel run tensorflow/lite/python:tflite_convert --
" trong lệnh.
Chuyển đổi SavedModel
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Chuyển đổi mô hình Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite