Konverter TensorFlow Lite

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:

  1. 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.
  2. Baris perintah : ini hanya mendukung konversi model dasar.

Alur kerja konverter TFLite

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 )

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:

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).