The TensorFlow Lite converter mengambil model TensorFlow dan menghasilkan model TensorFlow Lite (dioptimalkan FlatBuffer format yang diidentifikasi oleh .tflite
ekstensi file). Anda memiliki dua opsi berikut untuk menggunakan konverter:
- API Python (disarankan): ini membuat lebih mudah untuk mengkonversi model sebagai bagian dari pipa pengembangan model, menerapkan optimasi, menambahkan metadata dan memiliki lebih banyak fitur.
- Baris perintah : ini hanya mendukung konversi model dasar.
Python API
Kode Helper: Untuk mengidentifikasi versi diinstal TensorFlow, jalankan print(tf.__version__)
dan untuk mempelajari lebih lanjut tentang TensorFlow Lite converter API, run print(help(tf.lite.TFLiteConverter))
.
Jika Anda telah menginstal TensorFlow 2.x , Anda memiliki dua pilihan berikut: (jika Anda telah diinstal TensorFlow 1.x , lihat Github )
Mengkonversi model TensorFlow 2.x menggunakan
tf.lite.TFLiteConverter
. Sebuah TensorFlow Model 2.x disimpan menggunakan format SavedModel dan dihasilkan baik menggunakan tingkat tinggitf.keras.*
API (model Keras) atau tingkat rendahtf.*
API (dari mana Anda menghasilkan fungsi beton). Akibatnya, Anda memiliki tiga opsi berikut (contohnya ada di beberapa bagian berikutnya):-
tf.lite.TFLiteConverter.from_saved_model()
(disarankan): Mengubah sebuah SavedModel . -
tf.lite.TFLiteConverter.from_keras_model()
: Mengkonversi sebuah Keras Model. -
tf.lite.TFLiteConverter.from_concrete_functions()
: Mengkonversi fungsi beton .
-
Mengkonversi model TensorFlow 1.x menggunakan
tf.compat.v1.lite.TFLiteConverter
(contoh adalah pada Github ):-
tf.compat.v1.lite.TFLiteConverter.from_saved_model()
: Mengkonversi sebuah SavedModel . -
tf.compat.v1.lite.TFLiteConverter.from_keras_model_file()
: Mengkonversi sebuah Keras Model. -
tf.compat.v1.lite.TFLiteConverter.from_session()
: Mengkonversi sebuah GraphDef dari sesi. -
tf.compat.v1.lite.TFLiteConverter.from_frozen_graph()
: Mengkonversi sebuah Frozen GraphDef dari file. Jika Anda memiliki pos-pos pemeriksaan, maka pertama dikonversi ke file Frozen GraphDef dan kemudian menggunakan API ini seperti yang ditunjukkan di sini .
-
Mengonversi Model Tersimpan (disarankan)
Contoh berikut menunjukkan bagaimana mengkonversi 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 bagaimana mengkonversi Keras model ke 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 beton
Contoh berikut menunjukkan bagaimana mengkonversi fungsi beton 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.
# Notes that for the versions earlier than TensorFlow 2.7, the
# from_concrete_functions API is able to work when there is only the first
# argument given:
# > converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
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 optimasi . Sebuah optimasi yang umum digunakan adalah posting pelatihan kuantisasi , yang selanjutnya dapat mengurangi latency model dan ukuran dengan kehilangan minimal dalam akurasi.
Menambahkan metadata , yang membuatnya lebih mudah untuk membuat kode wrapper platform tertentu ketika deploying model pada perangkat.
Kesalahan konversi
Berikut ini adalah kesalahan konversi 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 mengatasi ini dengan menggunakan op TF dalam model TFLite (dianjurkan). Jika Anda ingin menghasilkan model dengan ops TFLite saja, Anda juga dapat menambahkan permintaan untuk TFLite op hilang di Github masalah # 21.526 (memberikan komentar jika permintaan Anda belum sudah disebutkan) atau menciptakan TFLite op sendiri.
Kesalahan:
.. is neither a custom op nor a flex op
Solusi: Jika TF op ini adalah:
Didukung dalam TF: Kesalahan terjadi karena TF op hilang dari allowlist (daftar lengkap ops TF didukung oleh TFLite). Anda dapat menyelesaikan ini sebagai berikut:
Tidak didukung di TF: Kesalahan terjadi karena TFLite tidak mengetahui operator TF khusus yang Anda tentukan. Anda dapat menyelesaikan ini sebagai berikut:
- Buat TF op .
- Mengkonversi model TF untuk model TFLite .
- Buat op TFLite dan menjalankan inferensi dengan menghubungkan ke runtime TFLite.
Alat Baris Perintah
Hal ini sangat disarankan agar Anda menggunakan API Python yang tercantum di atas sebaliknya, jika memungkinkan.
Jika Anda telah menginstal TensorFlow 2.x dari pip , gunakan tflite_convert
perintah sebagai berikut: (jika Anda telah diinstal TensorFlow 2.x dari sumber maka Anda dapat mengganti ' tflite_convert
' dengan ' bazel run //tensorflow/lite/python:tflite_convert --
'di bagian berikut, dan jika Anda telah menginstal TensorFlow 1.x kemudian merujuk ke Github ( referensi , contoh ))
tflite_convert
: Untuk melihat semua bendera 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.
Mengonversi Model Tersimpan
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 TensorFlow Lite untuk menjalankan inferensi pada perangkat klien (misalnya ponsel, tertanam).