Konversi model

TensorFlow.js hadir dengan berbagai model pra-terlatih yang siap untuk digunakan dalam browser - mereka dapat ditemukan di kami model repo . Namun Anda mungkin telah menemukan atau menulis model TensorFlow di tempat lain yang ingin Anda gunakan di aplikasi web Anda. TensorFlow.js menyediakan model converter 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 menjalankan model di browser dengan TensorFlow.js.

Ubah model Anda

Konverter TensorFlow.js berfungsi dengan beberapa format model yang berbeda:

SavedModel: Ini adalah format standar di mana 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 .

TensorFlow Hub modul: Ini adalah model yang telah dikemas untuk distribusi di TensorFlow Hub, sebuah platform untuk berbagi dan menemukan model. Model perpustakaan dapat ditemukan di sini .

Bergantung pada jenis model yang Anda coba konversi, Anda harus meneruskan argumen yang berbeda ke konverter. Sebagai contoh, katakanlah Anda telah disimpan model Keras bernama model.h5 untuk Anda tmp/ direktori. Untuk mengonversi model Anda menggunakan konverter TensorFlow.js, Anda dapat menjalankan perintah berikut:

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

Ini akan mengkonversi model di /tmp/model.h5 dan output model.json berkas bersama dengan file berat badan biner untuk Anda tmp/tfjs_model/ direktori.

Rincian lebih lanjut tentang argumen baris perintah yang sesuai dengan format model yang berbeda dapat ditemukan di TensorFlow.js converter README .

Selama proses konversi, kami menelusuri grafik model dan memeriksa apakah setiap operasi didukung oleh TensorFlow.js. Jika demikian, kami menulis grafik ke dalam format yang dapat digunakan browser. Kami mencoba mengoptimalkan model untuk disajikan di web dengan membagi bobot menjadi file 4MB - dengan cara itu mereka dapat di-cache oleh browser. Kami juga berusaha untuk menyederhanakan grafik model itu sendiri menggunakan open source Grappler proyek. Penyederhanaan grafik termasuk melipat bersama operasi yang berdekatan, menghilangkan subgraf umum, dll. Perubahan ini tidak berpengaruh pada output 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 gagal dan kami mencetak nama operasi untuk pengguna. Jangan ragu untuk mengirimkan masalah pada kami GitHub untuk memberitahu kami tahu tentang hal itu - kami mencoba untuk melaksanakan operasi baru dalam menanggapi permintaan pengguna.

Praktik terbaik

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

Jalankan model Anda

Setelah berhasil mengonversi model Anda, Anda akan mendapatkan satu set 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 untuk model Keras yang dikonversi:

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

The tf.loadGraphModel API mengembalikan tf.FrozenModel , yang berarti bahwa parameter tetap dan Anda tidak akan dapat fine tune Anda model dengan data baru. The tf.loadLayersModel API mengembalikan tf.Model, yang dapat dilatih. Untuk informasi tentang cara untuk melatih tf.Model, mengacu pada panduan kereta model .

Setelah konversi, ada baiknya menjalankan inferensi beberapa kali dan membandingkan kecepatan model Anda. Kami memiliki mandiri pembandingan halaman yang dapat digunakan untuk tujuan ini: https://tensorflow.github.io/tfjs/e2e/benchmarks/local-benchmark/index.html Anda mungkin memperhatikan bahwa kita membuang pengukuran dari pemanasan awal run - ini karena (secara umum) inferensi pertama model Anda akan beberapa kali lebih lambat daripada inferensi berikutnya karena overhead pembuatan tekstur dan kompilasi shader.