TensorFlow Lite obsługuje wiele operacji TensorFlow używanych w typowych modelach wnioskowania. Ponieważ są one przetwarzane przez Konwerter optymalizujący TensorFlow Lite, operacje te mogą zostać wyeliminowane lub połączone, zanim obsługiwane operacje zostaną zmapowane do ich odpowiedników w TensorFlow Lite.
Ponieważ wbudowana biblioteka operatorów TensorFlow Lite obsługuje tylko ograniczoną liczbę operatorów TensorFlow, nie każdy model można konwertować. Nawet w przypadku obsługiwanych operacji czasami oczekuje się bardzo specyficznych wzorców użycia ze względu na wydajność. Spodziewamy się rozszerzenia zestawu obsługiwanych operacji w przyszłych wydaniach TensorFlow Lite.
Najlepszym sposobem, aby zrozumieć, jak zbudować model TensorFlow, który może być używany z TensorFlow Lite, jest dokładne rozważenie, w jaki sposób operacje są konwertowane i optymalizowane, wraz z ograniczeniami narzuconymi przez ten proces.
Obsługiwane typy
Większość operacji TensorFlow Lite jest ukierunkowana zarówno na wnioskowanie zmiennoprzecinkowe ( float32
), jak i kwantowane ( uint8
, int8
), ale wiele uint8
int8
jeszcze innych typów, takich jak tf.float16
i stringi.
Oprócz używania różnych wersji operacji, inną różnicą między modelami zmiennoprzecinkowymi i kwantowymi jest sposób ich konwersji. Konwersja kwantowa wymaga informacji o zakresie dynamicznym dla tensorów. Wymaga to „fałszywej kwantyzacji” podczas uczenia modelu, uzyskania informacji o zasięgu za pomocą zestawu danych kalibracyjnych lub oszacowania zakresu „w locie”. Zobacz kwantyzację .
Obsługiwane operacje i ograniczenia
TensorFlow Lite obsługuje podzbiór operacji TensorFlow z pewnymi ograniczeniami. Pełna lista operacji i ograniczeń znajduje się na stronie TF Lite Ops .
Proste konwersje, ciągłe składanie i łączenie
Wiele operacji TensorFlow może być przetwarzanych przez TensorFlow Lite, nawet jeśli nie mają one bezpośredniego odpowiednika. Dzieje się tak w przypadku operacji, które można po prostu usunąć z wykresu ( tf.identity
), zastąpić tensorami ( tf.placeholder
) lub tf.placeholder
w bardziej złożone operacje ( tf.nn.bias_add
). Nawet niektóre obsługiwane operacje można czasami usunąć za pomocą jednego z tych procesów.
Oto niewyczerpująca lista operacji TensorFlow, które są zwykle usuwane z wykresu:
-
tf.add
-
tf.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
Operacje eksperymentalne
Dostępne są następujące operacje TensorFlow Lite, ale nie są one gotowe na modele niestandardowe:
-
CALL
-
CONCAT_EMBEDDINGS
-
CUSTOM
-
EMBEDDING_LOOKUP_SPARSE
-
HASHTABLE_LOOKUP
-
LSH_PROJECTION
-
SKIP_GRAM
-
SVDF