Simpan dan muat model

TensorFlow.js menyediakan fungsionalitas untuk menyimpan dan model yang telah dibuat dengan pemuatan Layers API atau dikonversi dari model TensorFlow yang ada. Ini mungkin model yang telah Anda latih sendiri atau yang dilatih oleh orang lain. Manfaat utama menggunakan Layers api adalah bahwa model yang dibuat dengannya dapat diserialisasi dan inilah yang akan kita jelajahi dalam tutorial ini.

Tutorial ini akan fokus pada penyimpanan dan pemuatan model TensorFlow.js (dapat diidentifikasi oleh file JSON). Kami juga dapat mengimpor model TensorFlow Python. Memuat model ini tercakup dalam dua tutorial berikut:

Simpan tf.Model

tf.Model dan tf.Sequential kedua menyediakan fungsi model.save yang memungkinkan Anda untuk menyimpan topologi dan bobot dari model.

  • Topologi: Ini adalah file yang menjelaskan arsitektur model (yaitu operasi apa yang digunakannya). Ini berisi referensi ke bobot model yang disimpan secara eksternal.

  • Bobot: Ini adalah file biner yang menyimpan bobot model tertentu dalam format yang efisien. Mereka umumnya disimpan dalam folder yang sama dengan topologi.

Mari kita lihat seperti apa kode untuk menyimpan model

const saveResult = await model.save('localstorage://my-model-1');

Beberapa hal yang perlu diperhatikan:

  • The save metode mengambil string argumen URL-seperti itu dimulai dengan skema. Ini menjelaskan jenis tujuan yang kami coba simpan modelnya. Dalam contoh di atas skema ini localstorage://
  • Skema ini diikuti oleh jalan. Dalam contoh di atas jalan adalah my-model-1 .
  • The save metode adalah asynchronous.
  • Nilai kembali dari model.save adalah objek JSON yang membawa informasi seperti ukuran byte dari topologi model dan bobot.
  • Lingkungan yang digunakan untuk menyimpan model tidak memengaruhi lingkungan mana yang dapat memuat model. Menyimpan model di node.js tidak mencegahnya dimuat di browser.

Di bawah ini kami akan memeriksa berbagai skema yang tersedia.

Penyimpanan Lokal (Hanya Peramban)

Skema: localstorage://

await model.save('localstorage://my-model');

Ini menghemat model dengan nama my-model di browser penyimpanan lokal . Ini akan tetap ada di antara penyegaran, meskipun penyimpanan lokal dapat dihapus oleh pengguna atau browser itu sendiri jika ruang menjadi masalah. Setiap browser juga menetapkan batasnya sendiri tentang berapa banyak data yang dapat disimpan di penyimpanan lokal untuk domain tertentu.

IndexedDB (khusus Peramban)

Skema: indexeddb://

await model.save('indexeddb://my-model');

Ini menghemat model untuk browser IndexedDB penyimpanan. Seperti penyimpanan lokal, ia tetap ada di antara penyegaran, ia juga cenderung memiliki batas yang lebih besar pada ukuran objek yang disimpan.

Unduhan File (Hanya Peramban)

Skema: downloads://

await model.save('downloads://my-model');

Ini akan menyebabkan browser mengunduh file model ke mesin pengguna. Dua file akan dihasilkan:

  1. Sebuah file JSON teks bernama [my-model].json , yang membawa topologi dan referensi ke file bobot dijelaskan di bawah.
  2. Sebuah file biner yang membawa nilai-nilai berat badan bernama [my-model].weights.bin .

Anda dapat mengubah nama [my-model] untuk mendapatkan file dengan nama yang berbeda.

Karena .json berkas poin ke .bin menggunakan path relatif, dua file harus dalam folder yang sama.

Permintaan HTTP(S)

Skema: http:// atau https://

await model.save('http://model-server.domain/upload')

Ini akan membuat permintaan web untuk menyimpan model ke server jauh. Anda harus mengendalikan server jarak jauh tersebut sehingga Anda dapat memastikan bahwa server tersebut mampu menangani permintaan tersebut.

Model ini akan dikirim ke server HTTP tertentu melalui POST permintaan. Tubuh POST dalam multipart/form-data Format dan terdiri dari dua file

  1. Sebuah file JSON teks bernama model.json , yang membawa topologi dan mengacu pada bobot file yang dijelaskan di bawah ini.
  2. Sebuah file biner yang membawa nilai-nilai berat badan bernama model.weights.bin .

Perhatikan bahwa nama kedua file akan selalu sama persis seperti yang ditentukan di atas (nama sudah ada di dalam fungsi). Ini doc api berisi potongan kode Python yang menunjukkan bagaimana seseorang dapat menggunakan labu kerangka web untuk menangani permintaan berasal dari save .

Seringkali Anda harus memberikan lebih banyak argumen atau header permintaan ke server HTTP Anda (misalnya untuk otentikasi atau jika Anda ingin menentukan folder tempat model harus disimpan). Anda bisa mendapatkan kontrol fine-grained lebih aspek dari permintaan dari save dengan mengganti argumen string URL di tf.io.browserHTTPRequest . API ini memberikan fleksibilitas yang lebih besar dalam mengontrol permintaan HTTP.

Sebagai contoh:

await model.save(tf.io.browserHTTPRequest(
    'http://model-server.domain/upload',
    {method: 'PUT', headers: {'header_key_1': 'header_value_1'} }));

Sistem File Asli (khusus Node.js)

Skema: file://

await model.save('file:///path/to/my-model');

Saat berjalan di Node.js, kami juga memiliki akses langsung ke sistem file dan dapat menyimpan model di sana. Perintah di atas akan menghemat dua file ke path yang ditentukan afer yang scheme .

  1. Sebuah file JSON teks bernama [model].json , yang membawa topologi dan referensi ke file bobot dijelaskan di bawah.
  2. Sebuah file biner yang membawa nilai-nilai berat badan bernama [model].weights.bin .

Perhatikan bahwa nama kedua file akan selalu sama persis seperti yang ditentukan di atas (nama sudah ada di dalam fungsi).

Memuat tf.Model

Mengingat model yang disimpan menggunakan salah satu metode di atas, kita dapat memuat dengan menggunakan tf.loadLayersModel API.

Mari kita lihat seperti apa kode untuk memuat model

const model = await tf.loadLayersModel('localstorage://my-model-1');

Beberapa hal yang perlu diperhatikan:

  • Seperti model.save() , yang loadLayersModel fungsi mengambil URL-seperti tali argumen bahwa dimulai dengan skema. Ini menjelaskan jenis tujuan yang kami coba muat modelnya.
  • Skema ini diikuti oleh jalan. Dalam contoh di atas jalan adalah my-model-1 .
  • String seperti url dapat diganti dengan objek yang cocok dengan antarmuka IOHandler.
  • The tf.loadLayersModel() fungsi asynchronous.
  • Nilai kembali dari tf.loadLayersModel adalah tf.Model

Di bawah ini kami akan memeriksa berbagai skema yang tersedia.

Penyimpanan Lokal (Hanya Peramban)

Skema: localstorage://

const model = await tf.loadLayersModel('localstorage://my-model');

Beban ini model bernama my-model dari browser penyimpanan lokal .

IndexedDB (khusus Peramban)

Skema: indexeddb://

const model = await tf.loadLayersModel('indexeddb://my-model');

Ini beban model dari browser IndexedDB penyimpanan.

HTTP(S)

Skema: http:// atau https://

const model = await tf.loadLayersModel('http://model-server.domain/download/model.json');

Ini memuat model dari titik akhir http. Setelah loading json berkas fungsi akan membuat permintaan untuk sesuai .bin file bahwa json referensi file.

Sistem File Asli (khusus Node.js)

Skema: file://

const model = await tf.loadLayersModel('file://path/to/my-model/model.json');

Saat berjalan di Node.js, kami juga memiliki akses langsung ke sistem file dan dapat memuat model dari sana. Perhatikan bahwa dalam pemanggilan fungsi di atas kami mereferensikan file model.json itu sendiri (sedangkan saat menyimpan kami menentukan folder). Yang sesuai .bin file (s) harus dalam folder yang sama sebagai json berkas.

Memuat model dengan IOHandlers

Jika skema di atas tidak cukup untuk kebutuhan Anda, Anda dapat menerapkan perilaku memuat kustom dengan IOHandler . Salah satu IOHandler yang TensorFlow.js menyediakan adalah tf.io.browserFiles yang memungkinkan pengguna browser untuk meng-upload file model dalam browser. Lihat dokumentasi untuk informasi lebih lanjut.

Menyimpan dan Memuat Model dengan IOHandler khusus

Jika skema di atas tidak cukup untuk memuat atau kebutuhan tabungan Anda dapat menerapkan perilaku serialisasi kustom dengan menerapkan IOHandler .

Sebuah IOHandler adalah obyek dengan save dan load metode.

The save fungsi mengambil satu parameter yang merupakan sesuai dengan ModelArtifacts antarmuka dan harus kembali janji yang resolve ke SaveResult objek.

The load fungsi tidak mengambil parameter dan harus kembali janji yang resolve ke ModelArtifacts keberatan. Ini adalah objek yang sama yang dilewatkan ke save .

Lihat BrowserHTTPRequest untuk contoh bagaimana menerapkan IOHandler.