Operator machine learning (ML) yang Anda gunakan dalam model Anda dapat memengaruhi proses konversi model TensorFlow ke format TensorFlow Lite. Konverter TensorFlow Lite mendukung sejumlah operasi TensorFlow yang digunakan dalam model inferensi umum, yang berarti bahwa tidak setiap model dapat langsung dikonversi. Alat konverter memungkinkan Anda untuk menyertakan operator tambahan, tetapi mengonversi model dengan cara ini juga mengharuskan Anda untuk memodifikasi lingkungan waktu proses TensorFlow Lite yang Anda gunakan untuk menjalankan model Anda, yang dapat membatasi kemampuan Anda menggunakan opsi penerapan waktu proses standar, seperti layanan Google Play .
TensorFlow Lite Converter dirancang untuk menganalisis struktur model dan menerapkan pengoptimalan agar kompatibel dengan operator yang didukung langsung. Misalnya, bergantung pada operator ML dalam model Anda, konverter dapat menghilangkan atau menggabungkan operator tersebut untuk memetakannya ke rekanan TensorFlow Lite mereka.
Bahkan untuk operasi yang didukung, pola penggunaan tertentu terkadang diharapkan, karena alasan kinerja. Cara terbaik untuk memahami cara membangun model TensorFlow yang dapat digunakan dengan TensorFlow Lite adalah dengan mempertimbangkan dengan cermat bagaimana operasi dikonversi dan dioptimalkan, bersama dengan batasan yang diberlakukan oleh proses ini.
Operator yang didukung
Operator bawaan TensorFlow Lite adalah subset dari operator yang merupakan bagian dari pustaka inti TensorFlow. Model TensorFlow Anda juga dapat menyertakan operator khusus dalam bentuk operator gabungan atau operator baru yang Anda tentukan. Diagram di bawah ini menunjukkan hubungan antara operator ini.
Dari berbagai operator model ML ini, ada 3 jenis model yang didukung oleh proses konversi:
- Model dengan hanya operator bawaan TensorFlow Lite. ( Direkomendasikan )
- Model dengan operator bawaan dan operator inti TensorFlow tertentu.
- Model dengan operator bawaan, operator inti TensorFlow, dan/atau operator khusus.
Jika model Anda hanya berisi operasi yang secara native didukung oleh TensorFlow Lite, Anda tidak memerlukan tanda tambahan untuk mengonversinya. Ini adalah jalur yang disarankan karena model jenis ini akan mengonversi dengan lancar dan lebih mudah untuk dioptimalkan dan dijalankan menggunakan runtime TensorFlow Lite default. Anda juga memiliki lebih banyak opsi penerapan untuk model Anda seperti layanan Google Play . Anda dapat memulai dengan panduan konverter TensorFlow Lite . Lihat halaman TensorFlow Lite Ops untuk daftar operator bawaan.
Jika Anda perlu menyertakan operasi TensorFlow tertentu dari pustaka inti, Anda harus menentukannya saat konversi dan memastikan waktu proses Anda menyertakan operasi tersebut. Lihat topik Pilih operator TensorFlow untuk langkah-langkah mendetail.
Jika memungkinkan, hindari opsi terakhir untuk menyertakan operator khusus dalam model Anda yang dikonversi. Operator khusus adalah operator yang dibuat dengan menggabungkan beberapa operator inti TensorFlow primitif atau mendefinisikan yang benar-benar baru. Saat operator kustom dikonversi, mereka dapat meningkatkan ukuran model keseluruhan dengan menimbulkan dependensi di luar library TensorFlow Lite bawaan. Operasi kustom, jika tidak dibuat secara khusus untuk penyebaran perangkat seluler atau perangkat, dapat menghasilkan kinerja yang lebih buruk saat diterapkan ke perangkat dengan sumber daya terbatas dibandingkan dengan lingkungan server. Terakhir, seperti halnya menyertakan operator inti TensorFlow tertentu, operator khusus mengharuskan Anda untuk mengubah lingkungan waktu proses model yang membatasi Anda untuk memanfaatkan layanan waktu proses standar seperti layanan Google Play .
Jenis yang didukung
Sebagian besar operasi TensorFlow Lite menargetkan inferensi titik-mengambang ( float32
) dan terkuantisasi ( uint8
, int8
), tetapi banyak operasi belum untuk jenis lain seperti tf.float16
dan string.
Selain menggunakan versi operasi yang berbeda, perbedaan lain antara model titik-mengambang dan model terkuantisasi adalah cara mereka dikonversi. Konversi terkuantisasi memerlukan informasi rentang dinamis untuk tensor. Ini membutuhkan "kuantisasi palsu" selama pelatihan model, mendapatkan informasi jangkauan melalui kumpulan data kalibrasi, atau melakukan estimasi jangkauan "on-the-fly". Lihat kuantisasi untuk lebih jelasnya.
Konversi langsung, pelipatan konstan dan sekering
Sejumlah operasi TensorFlow dapat diproses oleh TensorFlow Lite meskipun tidak memiliki padanan langsung. Ini adalah kasus untuk operasi yang dapat dengan mudah dihapus dari grafik ( tf.identity
), diganti dengan tensor ( tf.placeholder
), atau digabungkan menjadi operasi yang lebih kompleks ( tf.nn.bias_add
). Bahkan beberapa operasi yang didukung terkadang dapat dihapus melalui salah satu proses ini.
Berikut adalah daftar operasi TensorFlow yang tidak lengkap yang biasanya dihapus dari grafik:
-
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
Operasi Eksperimental
Operasi TensorFlow Lite berikut ada, tetapi belum siap untuk model kustom:
-
CALL
-
CONCAT_EMBEDDINGS
-
CUSTOM
-
EMBEDDING_LOOKUP_SPARSE
-
HASHTABLE_LOOKUP
-
LSH_PROJECTION
-
SKIP_GRAM
-
SVDF