Halaman ini menjelaskan cara mengonversi model TensorFlow ke model TensorFlow Lite (format FlatBuffer yang dioptimalkan yang diidentifikasi dengan ekstensi file .tflite
) menggunakan konverter TensorFlow Lite.
Alur kerja konversi
Diagram di bawah menggambarkan alur kerja tingkat tinggi untuk mengonversi model Anda:
Gambar 1. Alur kerja konverter.
Anda dapat mengonversi model Anda menggunakan salah satu opsi berikut:
- API Python ( direkomendasikan ): Ini memungkinkan Anda mengintegrasikan konversi ke dalam jalur pengembangan Anda, menerapkan pengoptimalan, menambahkan metadata, dan banyak tugas lain yang menyederhanakan proses konversi.
- Baris perintah : Ini hanya mendukung konversi model dasar.
API Python
Kode pembantu: Untuk mempelajari lebih lanjut tentang API konverter TensorFlow Lite, jalankan print(help(tf.lite.TFLiteConverter))
.
Konversi model TensorFlow menggunakan tf.lite.TFLiteConverter
. Model TensorFlow disimpan menggunakan format SavedModel dan dihasilkan menggunakan tf.keras.*
tingkat tinggi (model Keras) atau API tf.*
tingkat rendah (dari mana Anda menghasilkan fungsi konkret). Hasilnya, Anda memiliki tiga opsi berikut (contohnya ada di beberapa bagian berikutnya):
-
tf.lite.TFLiteConverter.from_saved_model()
( disarankan ): Mengonversi SavedModel . -
tf.lite.TFLiteConverter.from_keras_model()
: Mengonversi model Keras . -
tf.lite.TFLiteConverter.from_concrete_functions()
: Mengonversi fungsi konkrit .
Mengonversi SavedModel (disarankan)
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)
Konversi 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)
Konversi fungsi konkrit
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 umum yang digunakan adalah kuantisasi pasca pelatihan , yang selanjutnya dapat mengurangi latensi dan ukuran model Anda dengan kehilangan akurasi yang minimal.
Tambahkan metadata , yang memudahkan pembuatan kode wrapper khusus platform saat menerapkan model pada perangkat.
Kesalahan konversi
Berikut ini adalah kesalahan konversi yang umum dan solusinya:
Kesalahan:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select. See instructions: <a href="https://www.tensorflow.org/lite/guide/ops_select">https://www.tensorflow.org/lite/guide/ops_select</a> TF Select ops: ..., .., ...
Solusi: Kesalahan terjadi karena model Anda memiliki operasi TF yang tidak memiliki implementasi TFLite yang sesuai. Anda dapat mengatasinya dengan menggunakan operasi TF di model TFLite (disarankan). Jika Anda ingin membuat model dengan operasi TFLite saja, Anda dapat menambahkan permintaan untuk operasi TFLite yang hilang di Github edisi #21526 (tinggalkan komentar jika permintaan Anda belum disebutkan) atau buat sendiri operasi TFLite .
Kesalahan:
.. is neither a custom op nor a flex op
Solusi: Jika op TF ini adalah:
Didukung di TF: Kesalahan terjadi karena operasi TF tidak ada dalam daftar yang diizinkan (daftar lengkap operasi TF yang didukung oleh TFLite). Anda dapat mengatasinya dengan cara berikut:
Tidak didukung di TF: Kesalahan terjadi karena TFLite tidak mengetahui operator TF khusus yang Anda tentukan. Anda dapat mengatasinya dengan cara berikut:
- Buat operasi TF .
- Ubah model TF menjadi model TFLite .
- Buat operasi TFLite dan jalankan inferensi dengan menautkannya ke runtime TFLite.
Alat Baris Perintah
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 mengunduh 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 --
' pada perintah.
Mengonversi SavedModel
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
Langkah selanjutnya
Gunakan juru bahasa TensorFlow Lite untuk menjalankan inferensi pada perangkat klien (misalnya seluler, tertanam).