Konversi model

TensorFlow.js hadir dengan berbagai model terlatih yang siap digunakan di browser - model tersebut dapat ditemukan di repo model kami. Namun Anda mungkin telah menemukan atau membuat model TensorFlow di tempat lain yang ingin Anda gunakan dalam aplikasi web Anda. TensorFlow.js menyediakan konverter model untuk tujuan ini. Konverter TensorFlow.js memiliki dua komponen:

  1. Utilitas baris perintah yang mengonversi model Keras dan TensorFlow untuk digunakan di TensorFlow.js.
  2. API untuk memuat dan mengeksekusi model di browser dengan TensorFlow.js.

Konversikan model Anda

Konverter TensorFlow.js berfungsi dengan beberapa format model berbeda:

SavedModel : Ini adalah format default tempat model TensorFlow disimpan. Format SavedModel didokumentasikan di sini .

Model Keras : Model Keras umumnya disimpan sebagai file HDF5. Informasi lebih lanjut tentang menyimpan model Keras dapat ditemukan di sini .

Modul TensorFlow Hub : Ini adalah model yang telah dikemas untuk didistribusikan di TensorFlow Hub, sebuah platform untuk berbagi dan menemukan model. Perpustakaan model dapat ditemukan di sini .

Bergantung pada jenis model yang ingin Anda konversi, Anda harus meneruskan argumen yang berbeda ke konverter. Misalnya, Anda telah menyimpan model Keras bernama model.h5 ke direktori tmp/ Anda. Untuk mengonversi model menggunakan konverter TensorFlow.js, Anda dapat menjalankan perintah berikut:

$ tensorflowjs_converter --input_format=keras /tmp/model.h5 /tmp/tfjs_model

Ini akan mengonversi model di /tmp/model.h5 dan menampilkan file model.json bersama dengan file bobot biner ke direktori tmp/tfjs_model/ Anda.

Detail lebih lanjut tentang argumen baris perintah yang terkait dengan format model berbeda dapat ditemukan di konverter TensorFlow.js README .

Selama proses konversi, kami menjelajahi grafik model dan memeriksa apakah setiap operasi didukung oleh TensorFlow.js. Jika demikian, kami menulis grafik ke dalam format yang dapat digunakan oleh browser. Kami mencoba mengoptimalkan model untuk disajikan di web dengan membagi bobot menjadi file berukuran 4 MB - sehingga bobot tersebut dapat di-cache oleh browser. Kami juga berupaya menyederhanakan grafik model itu sendiri menggunakan proyek Grappler sumber terbuka. Penyederhanaan grafik mencakup menggabungkan operasi yang berdekatan, menghilangkan subgraf umum, dll. Perubahan ini tidak berpengaruh pada keluaran model. Untuk pengoptimalan lebih lanjut, pengguna dapat meneruskan argumen yang menginstruksikan konverter untuk mengkuantisasi model ke ukuran byte tertentu. Kuantisasi adalah teknik untuk mengurangi ukuran model dengan merepresentasikan bobot dengan bit yang lebih sedikit. Pengguna harus berhati-hati untuk memastikan bahwa model mereka mempertahankan tingkat akurasi yang dapat diterima setelah kuantisasi.

Jika kami menemukan operasi yang tidak didukung selama konversi, proses tersebut gagal dan kami mencetak nama operasi untuk pengguna. Jangan ragu untuk mengirimkan masalah di GitHub kami untuk memberi tahu kami - kami mencoba menerapkan operasi baru sebagai respons terhadap permintaan pengguna.

Praktik terbaik

Meskipun kami melakukan segala upaya untuk mengoptimalkan model Anda selama konversi, sering kali cara terbaik untuk memastikan model Anda berperforma baik adalah dengan membangunnya dengan mempertimbangkan lingkungan dengan sumber daya terbatas. Ini berarti menghindari arsitektur yang terlalu rumit dan meminimalkan jumlah parameter (bobot) jika memungkinkan.

Jalankan model Anda

Setelah berhasil mengonversi model, Anda akan mendapatkan sekumpulan file bobot dan file topologi model. TensorFlow.js menyediakan API pemuatan model yang dapat Anda gunakan untuk mengambil aset model ini dan menjalankan inferensi di browser.

Berikut tampilan API untuk modul TensorFlow SavedModel atau TensorFlow Hub yang dikonversi:

const model = await tf.loadGraphModel(‘path/to/model.json’);

Dan inilah tampilan model Keras yang dikonversi:

const model = await tf.loadLayersModel(‘path/to/model.json’);

tf.loadGraphModel API mengembalikan tf.FrozenModel , yang berarti parameternya sudah tetap dan Anda tidak akan dapat menyempurnakan model Anda dengan data baru. API tf.loadLayersModel mengembalikan tf.Model, yang dapat dilatih. Untuk informasi tentang cara melatih tf.Model, lihat panduan model kereta .

Setelah konversi, sebaiknya jalankan inferensi beberapa kali dan ukur kecepatan model Anda. Kami memiliki halaman pembandingan mandiri yang dapat digunakan untuk tujuan ini: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Anda mungkin memperhatikan bahwa kami membuang pengukuran dari proses pemanasan awal - ini karena (secara umum) inferensi pertama model Anda akan beberapa kali lebih lambat dibandingkan inferensi berikutnya karena biaya pembuatan tekstur dan kompilasi shader.