Die in Ihrem Modell verwendeten Operatoren für maschinelles Lernen (ML) können sich auf die Konvertierung eines TensorFlow-Modells in das TensorFlow Lite-Format auswirken. Der TensorFlow Lite-Konverter unterstützt eine begrenzte Anzahl von TensorFlow-Vorgängen, die in gängigen Inferenzmodellen verwendet werden, sodass nicht jedes Modell direkt konvertiert werden kann. Mit dem Konvertierungstool können Sie zusätzliche Operatoren einbinden. Allerdings müssen Sie zum Konvertieren eines Modells auf diese Weise auch die TensorFlow Lite-Laufzeitumgebung ändern, die Sie zum Ausführen des Modells verwenden. Dadurch sind die Möglichkeiten zur Nutzung von standardmäßigen Laufzeitbereitstellungsoptionen wie Google Play-Diensten möglicherweise eingeschränkt.
Der TensorFlow Lite Converter analysiert die Modellstruktur und wendet Optimierungen an, um ihn mit den direkt unterstützten Operatoren kompatibel zu machen. Abhängig von den ML-Operatoren in Ihrem Modell kann der Converter diese Operatoren beispielsweise entfernen oder zusammenführen, um sie seinen TensorFlow Lite-Gegenstücken zuzuordnen.
Selbst bei unterstützten Vorgängen werden aus Leistungsgründen manchmal bestimmte Nutzungsmuster erwartet. Um zu verstehen, wie ein TensorFlow-Modell erstellt wird, das mit TensorFlow Lite verwendet werden kann, sollten Sie sorgfältig überlegen, wie Vorgänge konvertiert und optimiert werden und welche Einschränkungen durch diesen Prozess auferlegt werden.
Unterstützte Operatoren
Die in TensorFlow Lite integrierten Operatoren sind eine Teilmenge der Operatoren, die Teil der TensorFlow Core-Bibliothek sind. Das TensorFlow-Modell kann auch benutzerdefinierte Operatoren in Form von zusammengesetzten Operatoren oder neuen von Ihnen definierten Operatoren enthalten. Das folgende Diagramm zeigt die Beziehungen zwischen diesen Operatoren.
Aus dieser Reihe von ML-Modelloperatoren gibt es drei Modelltypen, die vom Konvertierungsprozess unterstützt werden:
- Modelle nur mit integriertem TensorFlow Lite-Operator. (Empfohlen)
- Modelle mit den integrierten Operatoren und ausgewählten TensorFlow-Kernoperatoren.
- Modelle mit integrierten Operatoren, TensorFlow-Kernoperatoren und/oder benutzerdefinierten Operatoren.
Wenn Ihr Modell nur Vorgänge enthält, die nativ von TensorFlow Lite unterstützt werden, benötigen Sie keine zusätzlichen Flags für die Konvertierung. Dies ist der empfohlene Pfad, da dieser Modelltyp reibungslos konvertiert wird und einfacher zu optimieren und mit der TensorFlow Lite-Standardlaufzeit auszuführen ist. Sie haben auch mehr Bereitstellungsoptionen für Ihr Modell, z. B. Google Play-Dienste. Informationen zum Einstieg finden Sie in der Anleitung zum Konverter für TensorFlow Lite. Eine Liste der integrierten Operatoren finden Sie auf der Seite "TensorFlow Lite Ops".
Wenn Sie ausgewählte TensorFlow-Vorgänge aus der Kernbibliothek einschließen möchten, müssen Sie dies bei der Konvertierung angeben und dafür sorgen, dass Ihre Laufzeit diese Vorgänge enthält. Eine ausführliche Anleitung finden Sie unter TensorFlow-Operatoren auswählen.
Vermeiden Sie nach Möglichkeit die letzte Option, benutzerdefinierte Operatoren in das konvertierte Modell aufzunehmen. Benutzerdefinierte Operatoren sind entweder Operatoren, die durch die Kombination mehrerer primitiver TensorFlow-Kernoperatoren erstellt wurden, oder durch die Definition eines komplett neuen Operators. Wenn benutzerdefinierte Operatoren konvertiert werden, können sie die Größe des Gesamtmodells erhöhen, da Abhängigkeiten außerhalb der integrierten TensorFlow Lite-Bibliothek anfallen. Benutzerdefinierte Vorgänge, die nicht speziell für die Bereitstellung von Mobilgeräten oder Geräten erstellt wurden, können bei der Bereitstellung auf ressourcenbeschränkten Geräten im Vergleich zu einer Serverumgebung zu einer schlechteren Leistung führen. Wie bei ausgewählten TensorFlow-Kernoperatoren müssen Sie auch bei benutzerdefinierten Operatoren die Modelllaufzeitumgebung ändern, sodass Sie keine Standardlaufzeitdienste wie die Google Play-Dienste nutzen können.
Unterstützte Typen
Die meisten TensorFlow Lite-Vorgänge zielen sowohl auf Gleitkommainferenzen (float32
) als auch auf quantisierte Inferenzen (uint8
, int8
) ab. Für andere Typen wie tf.float16
und Strings sind viele Vorgänge noch nicht verfügbar.
Der andere Unterschied zwischen Gleitkomma- und quantisierten Modellen besteht darin, wie sie konvertiert werden. Dabei werden nicht nur unterschiedliche Versionen der Vorgänge verwendet. Die quantisierte Umwandlung erfordert Informationen zum dynamischen Bereich für Tensoren. Dies erfordert eine "falsche Quantisierung" während des Modelltrainings, das Abrufen von Bereichsinformationen über ein Kalibrierungs-Dataset oder eine "schnelle" Bereichsschätzung. Weitere Informationen finden Sie unter Quantisierung.
Unkomplizierte Conversions, ständiges Falten und Zusammenführen
Eine Reihe von TensorFlow-Vorgängen kann von TensorFlow Lite verarbeitet werden, obwohl es kein direktes Äquivalent gibt. Dies ist bei Operationen der Fall, die einfach aus dem Graphen entfernt (tf.identity
), durch Tensoren (tf.placeholder
) ersetzt oder in komplexere Operationen (tf.nn.bias_add
) zusammengeführt werden können. Manchmal können auch einige unterstützte Operationen durch einen dieser Prozesse entfernt werden.
Hier ist eine nicht vollständige Liste von TensorFlow-Vorgängen, die normalerweise aus der Grafik entfernt werden:
tf.add
tf.debugging.check_numerics
tf.constant
tf.div
tf.divide
tf.fake_quant_with_min_max_args
tf.fake_quant_with_min_max_vars
tf.identity
tf.maximum
tf.minimum
tf.multiply
tf.no_op
tf.placeholder
tf.placeholder_with_default
tf.realdiv
tf.reduce_max
tf.reduce_min
tf.reduce_sum
tf.rsqrt
tf.shape
tf.sqrt
tf.square
tf.subtract
tf.tile
tf.nn.batch_norm_with_global_normalization
tf.nn.bias_add
tf.nn.fused_batch_norm
tf.nn.relu
tf.nn.relu6
Experimentelle Vorgänge
Die folgenden TensorFlow Lite-Vorgänge sind vorhanden, aber nicht für benutzerdefinierte Modelle bereit:
CALL
CONCAT_EMBEDDINGS
CUSTOM
EMBEDDING_LOOKUP_SPARSE
HASHTABLE_LOOKUP
LSH_PROJECTION
SKIP_GRAM
SVDF