TensorFlow modellerini dönüştürme

Bu sayfada, bir TensorFlow modelinin TensorFlow Lite dönüştürücü kullanılarak nasıl TensorFlow Lite modeline (.tflite dosya uzantısıyla tanımlanan optimize edilmiş bir FlatBuffer biçimi) nasıl dönüştürüleceği açıklanmaktadır.

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

Aşağıdaki şemada, modelinizi dönüştürmek için kullanılan üst düzey 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 yöntem, dönüşümü geliştirme ardışık düzeninize entegre etmenize, optimizasyon uygulamanıza, meta veri eklemenize ve dönüşüm sürecini basitleştiren diğer birçok görevi eklemenize olanak tanır.
  2. Komut satırı: Bu yalnızca temel model dönüştürmesini destekler.

Python API

Yardımcı kodu: TensorFlow Lite conversioner API hakkında daha fazla bilgi edinmek için print(help(tf.lite.TFLiteConverter)) komutunu çalıştırın.

tf.lite.TFLiteConverter kullanarak bir TensorFlow modelini dönüştürün. TensorFlow modeli, SavedModel biçimi kullanılarak depolanır ve üst düzey tf.keras.* API'leri (Keras modeli) veya alt düzey tf.* API'leri (somut fonksiyonlar oluşturursunuz) kullanılarak oluşturulur. Sonuç olarak, aşağıdaki üç seçenek sunulur (örnekleri sonraki birkaç bölümde bulabilirsiniz):

Aşağıdaki örnekte, SavedModel öğesinin 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ürün

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 fonksiyonları dönüştürme

Aşağıdaki örnekte, somut işlevlerin TensorFlow Lite modeline nasıl 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. Eğitim sonrası niceleme, yaygın olarak kullanılan bir optimizasyon yöntemidir. Bu yöntem, model gecikmenizi ve boyutunuzu minimum doğruluk kaybıyla daha da azaltabilir.

  • Modelleri cihazlara dağıtırken platforma özel 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ız yüklüyse ve dönüştürücüyü paketi oluşturup yüklemeden bu kaynaktan çalıştırmak istiyorsanız komuttaki "tflite_convert" değerini "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