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 inilocalstorage://
- 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:
- Sebuah file JSON teks bernama
[my-model].json
, yang membawa topologi dan referensi ke file bobot dijelaskan di bawah. - 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
- Sebuah file JSON teks bernama
model.json
, yang membawa topologi dan mengacu pada bobot file yang dijelaskan di bawah ini. - 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
.
- Sebuah file JSON teks bernama
[model].json
, yang membawa topologi dan referensi ke file bobot dijelaskan di bawah. - 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()
, yangloadLayersModel
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
adalahtf.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.