Halaman ini menjelaskan cara mengonversi model TensorFlow menjadi model LiteRT (format FlatBuffer yang dioptimalkan dan diidentifikasi oleh ekstensi file .tflite) menggunakan pengonversi LiteRT.
Alur kerja konversi
Diagram di bawah menggambarkan alur kerja tingkat tinggi untuk mengonversi model Anda:

Gambar 1. Alur kerja konverter.
Anda dapat mengonversi model menggunakan salah satu opsi berikut:
- Python API (direkomendasikan): Dengan API ini, Anda dapat mengintegrasikan konversi ke dalam pipeline pengembangan, menerapkan pengoptimalan, menambahkan metadata, dan banyak tugas lainnya yang menyederhanakan proses konversi.
- Command line: Hanya mendukung konversi model dasar.
Python API
Kode helper: Untuk mempelajari lebih lanjut LiteRT Converter API, jalankan
print(help(tf.lite.TFLiteConverter)).
Mengonversi model TensorFlow menggunakan
tf.lite.TFLiteConverter. Model
TensorFlow disimpan menggunakan format SavedModel dan dibuat menggunakan
API tf.keras.* tingkat tinggi (model Keras) atau API tf.* tingkat rendah (yang digunakan untuk membuat fungsi konkret). Akibatnya, Anda memiliki tiga opsi berikut (contohnya ada di beberapa bagian berikutnya):
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 SavedModel (direkomendasikan)
Contoh berikut menunjukkan cara mengonversi SavedModel menjadi model TensorFlow Lite.
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 model Keras menjadi model TensorFlow Lite.
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. Pengoptimalan umum yang digunakan adalah kuantisasi setelah pelatihan, yang dapat lebih mengurangi latensi dan ukuran model Anda dengan kehilangan akurasi yang minimal.
Menambahkan metadata, yang mempermudah pembuatan kode wrapper khusus platform saat men-deploy model di perangkat.
Error konversi
Berikut adalah error konversi umum dan 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 penerapan TFLite yang sesuai. Anda dapat menyelesaikannya dengan menggunakan op TF dalam model TFLite (direkomendasikan). Jika Anda ingin membuat model dengan hanya menggunakan operasi TFLite, Anda dapat menambahkan permintaan untuk operasi TFLite yang tidak ada di GitHub issue #21526 (tinggalkan komentar jika permintaan Anda belum disebutkan) atau membuat operasi TFLite sendiri.
Error:
.. is neither a custom op nor a flex opSolusi: Jika operasi TF ini adalah:
- Didukung di TF: Error terjadi karena operasi TF tidak ada dalam daftar yang diizinkan (daftar lengkap operasi TF yang didukung oleh TFLite). Anda dapat menyelesaikannya sebagai berikut:
- Tambahkan operasi yang tidak ada ke daftar yang diizinkan. 2. Konversi model TF ke model TFLite dan jalankan inferensi.
- Tidak didukung di TF: Error terjadi karena TFLite tidak mengetahui operator TF kustom yang Anda tentukan. Anda dapat menyelesaikannya sebagai berikut:
- Buat operasi TF.
- Konversi model TF ke model TFLite.
- Buat op TFLite dan jalankan inferensi dengan menautkannya ke runtime TFLite.
Alat Command Line
Jika Anda telah menginstal TensorFlow 2.x dari
pip, gunakan perintah tflite_convert.
Untuk melihat semua flag 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 telah mendownload sumber TensorFlow 2.x dan ingin menjalankan
konverter dari sumber tersebut tanpa membuat dan menginstal paket, Anda
dapat mengganti 'tflite_convert' dengan 'bazel run
tensorflow/lite/python:tflite_convert --' dalam perintah.
Mengonversi SavedModel
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Mengonversi model H5 Keras
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite