Halaman ini menjelaskan cara mengonversi model TensorFlow menjadi model TensorFlow Lite (format FlatBuffer yang dioptimalkan yang diidentifikasi oleh ekstensi file .tflite
) menggunakan konverter TensorFlow Lite.
Alur kerja konversi
Diagram di bawah mengilustrasikan alur kerja tingkat tinggi untuk mengonversi model Anda:
Gambar 1. Alur kerja pengonversi.
Anda dapat mengonversi model Anda menggunakan salah satu opsi berikut:
- Python API (direkomendasikan): Hal ini memungkinkan Anda mengintegrasikan konversi ke dalam pipeline pengembangan, menerapkan pengoptimalan, menambahkan metadata, dan banyak tugas lain yang menyederhanakan proses konversi.
- Command line: Ini hanya mendukung konversi model dasar.
API Python
Kode helper: Untuk mempelajari API pengonversi TensorFlow Lite lebih lanjut, jalankan print(help(tf.lite.TFLiteConverter))
.
Konversikan model TensorFlow menggunakan tf.lite.TFLiteConverter
.
Model TensorFlow disimpan menggunakan formatSavedModel dan dibuat menggunakan tf.keras.*
API tingkat tinggi (model Keras) atau tf.*
API tingkat rendah (dari tempat Anda membuat fungsi konkret). Hasilnya, 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 SaveModel (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 TensorFlow Lite.
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 yang umum digunakan adalah kuantisasi pasca pelatihan, yang dapat mengurangi latensi dan ukuran model lebih lanjut dengan kerugian minimal pada akurasi.
Menambahkan metadata, yang mempermudah pembuatan kode wrapper khusus platform saat men-deploy model di perangkat.
Error konversi
Berikut adalah error konversi umum 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 implementasi TFLite yang sesuai. Anda dapat mengatasi hal ini dengan menggunakan pengoperasian TF dalam model TFLite (direkomendasikan). Jika ingin membuat model hanya dengan operasi TFLite, Anda dapat menambahkan permintaan untuk operasi TFLite yang hilang di Masalah GitHub #21526 (berikan komentar jika permintaan Anda belum disebutkan) atau buat sendiri pengoperasian TFLite.
Error:
.. is neither a custom op nor a flex op
Solusi: Jika pengoperasian TF ini:
Didukung di TF: Error terjadi karena operasi TF tidak ada di daftar yang diizinkan (daftar lengkap operasi TF yang didukung oleh TFLite). Anda dapat mengatasi hal ini sebagai berikut:
Tidak didukung di TF: Error terjadi karena TFLite tidak mengetahui operator TF kustom yang Anda tentukan. Anda dapat mengatasi hal ini sebagai berikut:
- Buat operasi TF.
- Konversi model TF ke model TFLite.
- Buat operasi 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 membangun dan menginstal paket, Anda dapat mengganti 'tflite_convert
' dengan 'bazel run tensorflow/lite/python:tflite_convert --
' dalam perintahnya.
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