Halaman ini menjelaskan cara mengonversi model TensorFlow
ke model LiteRT (pengoptimalan
Format FlatBuffer yang diidentifikasi oleh
.tflite
) menggunakan pengonversi LiteRT.
Alur kerja konversi
Diagram di bawah ini mengilustrasikan alur kerja tingkat tinggi untuk melakukan konversi model Anda:
Gambar 1. Alur kerja konverter.
Anda dapat mengonversi model menggunakan salah satu opsi berikut:
- Python API (direkomendasikan): Ini memungkinkan Anda mengintegrasikan konversi ke dalam pipeline pengembangan, menerapkan pengoptimalan, menambahkan metadata, dan banyak tugas lain yang dalam proses konversi.
- Command line: Opsi ini hanya mendukung konversi model dasar.
Python API
Kode bantuan: Untuk mempelajari pengonversi LiteRT lebih lanjut
API, jalankan print(help(tf.lite.TFLiteConverter))
.
Konversikan model TensorFlow menggunakan
tf.lite.TFLiteConverter
Model TensorFlow disimpan menggunakan formatSavedModel dan
dihasilkan menggunakan tf.keras.*
API level tinggi (model Keras) atau
tf.*
API tingkat rendah (tempat Anda membuat fungsi konkret). Sebagai seorang
Anda memiliki tiga opsi berikut (contoh ada di beberapa
):
tf.lite.TFLiteConverter.from_saved_model()
(direkomendasikan): Mengonversi SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: Mengonversi Model Keras.tf.lite.TFLiteConverter.from_concrete_functions()
: Mengonversi fungsi konkret.
Mengonversi TersimpanModel (direkomendasikan)
Contoh berikut menunjukkan cara mengonversi SavedModel ke TensorFlow model ringan.
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)
Mengonversi model Keras
Contoh berikut menunjukkan cara mengonversi Keras menjadi TensorFlow model ringan.
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)
Mengonversi fungsi konkret
Contoh berikut menunjukkan cara mengonversi fungsi konkret menjadi model 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)
Fitur lainnya
Terapkan pengoptimalan. Tanda umum pengoptimalan yang digunakan adalah kuantisasi pasca-pelatihan, yang dapat lebih mengurangi latensi dan ukuran model Anda dengan kerugian minimal tingkat akurasi.
Tambahkan metadata, yang memudahkan pembuatan platform kode wrapper tertentu saat men-deploy model di perangkat.
Error konversi
Berikut adalah error konversi yang umum terjadi beserta solusinya:
Error:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.
Solusi: Error terjadi karena model Anda memiliki operasi TF yang tidak memiliki sesuai dengan implementasi TFLite. Anda dapat mengatasinya dengan menggunakan TF op dalam model TFLite (disarankan). Jika Anda ingin membuat model hanya dengan operasi TFLite, Anda dapat menambahkan untuk perintah TFLite yang hilang Masalah GitHub #21526 (beri komentar jika permintaan Anda belum disebutkan) atau membuat operasi TFLite diri Anda sendiri.
Error:
.. is neither a custom op nor a flex op
Solusi: Jika opsi TF ini:
Didukung dalam TF: Error terjadi karena operasi TF hilang dari daftar yang diizinkan (daftar lengkap Operasi TF yang didukung oleh TFLite). Anda dapat mengatasi masalah ini sebagai berikut:
Tidak didukung di TF: Kesalahan terjadi karena TFLite tidak mengetahui operator TF kustom yang Anda tentukan. Anda dapat mengatasi masalah ini sebagai berikut:
- Buat operasi TF.
- Konversikan model TF ke model TFLite.
- Membuat operasi TFLite dan menjalankan inferensi dengan menautkannya ke TFLite.
Alat Command Line
Jika Anda sudah
menginstal TensorFlow 2.x dari pip, gunakan
perintah tflite_convert
. Untuk melihat semua tanda yang tersedia, gunakan
perintah berikut:
$ 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.
Jika Anda memiliki
Sumber TensorFlow 2.x
{i>unwload<i} dan ingin menjalankan konverter
dari sumber itu tanpa membuat dan
menginstal paket,
Anda dapat mengganti 'tflite_convert
' dengan
bazel run tensorflow/lite/python:tflite_convert --
dalam perintah.
Mengonversi SaveModel
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Mengonversi model Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite