TensorFlow modellerini dönüştürme

Bu sayfada, LiteRT dönüştürücüyü kullanarak TensorFlow modelini LiteRT modeline (.tflite dosya uzantısıyla tanımlanan, optimize edilmiş bir FlatBuffer biçimi) nasıl dönüştüreceğiniz açıklanmaktadır.

Dönüşüm iş akışı

Aşağıdaki şemada, modelinizi dönüştürmeye yönelik genel iş akışı gösterilmektedir:

TFLite dönüştürücü iş akışı

Şekil 1. Dönüştürücü iş akışı.

Aşağıdaki seçeneklerden birini kullanarak modelinizi dönüştürebilirsiniz:

  1. Python API (önerilir): Bu API, dönüşümü geliştirme hattınıza entegre etmenize, optimizasyonlar uygulamanıza, meta veriler eklemenize ve dönüşüm sürecini basitleştiren diğer birçok görevi gerçekleştirmenize olanak tanır.
  2. Komut satırı: Yalnızca temel model dönüştürme desteklenir.

Python API

Yardımcı kod: LiteRT dönüştürücü API hakkında daha fazla bilgi edinmek için print(help(tf.lite.TFLiteConverter)) komutunu çalıştırın.

tf.lite.TFLiteConverter kullanarak TensorFlow modelini dönüştürün. TensorFlow modeli, SavedModel biçiminde depolanır ve yüksek düzey tf.keras.* API'leri (Keras modeli) veya düşük düzey tf.* API'leri (somut işlevler oluşturduğunuz) kullanılarak oluşturulur. Bu nedenle, aşağıdaki üç seçeneğiniz vardır (örnekler sonraki birkaç bölümde verilmiştir):

Aşağıdaki örnekte, SavedModel'in TensorFlow Lite modeline nasıl dönüştürüleceği gösterilmektedir.

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)

Keras modelini dönüştürme

Aşağıdaki örnekte, Keras modelinin TensorFlow Lite modeline nasıl dönüştürüleceği gösterilmektedir.

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)

Somut işlevleri dönüştürme

Aşağıdaki örnekte, somut işlevlerin nasıl LiteRT modeline dönüştürüleceği gösterilmektedir.

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)

Diğer özellikler

  • Optimizasyonlar uygulayın. Yaygın olarak kullanılan bir optimizasyon yöntemi olan eğitim sonrası nicemleme, doğrulukta minimum kayıpla modelinizin gecikme süresini ve boyutunu daha da azaltabilir.

  • Cihazlara model dağıtırken platforma özgü sarmalayıcı kodu oluşturmayı kolaylaştıran meta veriler ekleyin.

Dönüşüm hataları

Sık karşılaşılan dönüşüm hataları ve çözümleri aşağıda verilmiştir:

Komut Satırı Aracı

TensorFlow 2.x'i pip'ten yüklediyseniz tflite_convert komutunu kullanın. Kullanılabilir tüm işaretleri görüntülemek için aşağıdaki komutu kullanın:

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

TensorFlow 2.x kaynağını indirdiyseniz ve paketi oluşturup yüklemeden dönüştürücüyü bu kaynaktan çalıştırmak istiyorsanız komuttaki "tflite_convert"yı "bazel run tensorflow/lite/python:tflite_convert --" ile değiştirebilirsiniz.

SavedModel'i dönüştürme

tflite_convert \
  --saved_model_dir=/tmp/mobilenet_saved_model \
  --output_file=/tmp/mobilenet.tflite

Keras H5 modelini dönüştürme

tflite_convert \
  --keras_model_file=/tmp/mobilenet_keras_model.h5 \
  --output_file=/tmp/mobilenet.tflite