Ekspor Model Tersimpan

Halaman ini menjelaskan detail mengekspor (menyimpan) model dari program TensorFlow ke format SavedModel dari TensorFlow 2 . Format ini adalah cara yang disarankan untuk membagikan model dan potongan model yang telah dilatih sebelumnya di TensorFlow Hub. Ini menggantikan format TF1 Hub yang lebih lama dan dilengkapi dengan serangkaian API baru. Anda dapat menemukan informasi lebih lanjut tentang mengekspor model format TF1 Hub dalam ekspor format TF1 Hub . Anda dapat menemukan detail tentang cara mengompresi SavedModel untuk dibagikan di TensorFlow Hub di sini .

Beberapa toolkit pembuatan model sudah menyediakan alat untuk melakukan ini (misalnya, lihat di bawah untuk TensorFlow Model Garden ).

Ringkasan

SavedModel adalah format serialisasi standar TensorFlow untuk model terlatih atau potongan model. Ini menyimpan bobot terlatih model bersama dengan operasi TensorFlow yang tepat untuk melakukan perhitungannya. Itu dapat digunakan secara independen dari kode yang membuatnya. Secara khusus, ini dapat digunakan kembali di berbagai API pembuatan model tingkat tinggi seperti Keras, karena operasi TensorFlow adalah bahasa dasarnya yang umum.

Menyimpan dari Keras

Dimulai dengan TensorFlow 2, tf.keras.Model.save() dan tf.keras.models.save_model() default ke format SavedModel (bukan HDF5). SavedModels yang dihasilkan yang dapat digunakan dengan hub.load() , hub.KerasLayer , dan adaptor serupa untuk API tingkat tinggi lainnya saat tersedia.

Untuk membagikan Model Keras yang lengkap, simpan saja dengan include_optimizer=False .

Untuk membagikan potongan Model Keras, buat potongan Model itu sendiri dan simpan. Anda dapat meletakkan kode seperti itu dari awal....

piece_to_share = tf.keras.Model(...)
full_model = tf.keras.Sequential([piece_to_share, ...])
full_model.fit(...)
piece_to_share.save(...)

...atau potong bagian untuk dibagikan setelah fakta (jika sesuai dengan layering model lengkap Anda):

full_model = tf.keras.Model(...)
sharing_input = full_model.get_layer(...).get_output_at(0)
sharing_output = full_model.get_layer(...).get_output_at(0)
piece_to_share = tf.keras.Model(sharing_input, sharing_output)
piece_to_share.save(..., include_optimizer=False)

Model TensorFlow di GitHub menggunakan pendekatan sebelumnya untuk BERT (lihat nlp/tools/export_tfhub_lib.py , perhatikan pemisahan antara core_model untuk ekspor dan pretrainer untuk memulihkan pos pemeriksaan) dan pendekatan terakhir untuk ResNet (lihat legacy/image_classification/tfhub_export. pi ).

Menyimpan dari TensorFlow tingkat rendah

Ini membutuhkan pemahaman yang baik tentang Panduan SavedModel TensorFlow .

Jika Anda ingin memberikan lebih dari sekadar tanda tangan penyajian, Anda harus mengimplementasikan antarmuka Reusable SavedModel . Secara konseptual, ini terlihat seperti

class MyMulModel(tf.train.Checkpoint):
  def __init__(self, v_init):
    super().__init__()
    self.v = tf.Variable(v_init)
    self.variables = [self.v]
    self.trainable_variables = [self.v]
    self.regularization_losses = [
        tf.function(input_signature=[])(lambda: 0.001 * self.v**2),
    ]

  @tf.function(input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
  def __call__(self, inputs):
    return tf.multiply(inputs, self.v)

tf.saved_model.save(MyMulModel(2.0), "/tmp/my_mul")

layer = hub.KerasLayer("/tmp/my_mul")
print(layer([10., 20.]))  # [20., 40.]
layer.trainable = True
print(layer.trainable_weights)  # [2.]
print(layer.losses)  # 0.004

Saran untuk pencipta SavedModel

Saat membuat SavedModel untuk dibagikan di TensorFlow Hub, pikirkan terlebih dahulu apakah dan bagaimana konsumen harus menyempurnakannya, dan berikan panduan dalam dokumentasi.

Menyimpan dari Model Keras harus membuat semua mekanisme fine-tuning bekerja (menghemat kerugian regularisasi bobot, mendeklarasikan variabel yang dapat dilatih, menelusuri __call__ untuk kedua training=True dan training=False , dll.)

Pilih antarmuka model yang berfungsi baik dengan aliran gradien, misalnya, log keluaran alih-alih probabilitas softmax atau prediksi top-k.

Jika model menggunakan dropout, normalisasi batch, atau teknik pelatihan serupa yang melibatkan hyperparameter, setel ke nilai yang masuk akal di banyak masalah target dan ukuran batch yang diharapkan. (Sampai tulisan ini dibuat, menabung dari Keras tidak memudahkan konsumen untuk menyesuaikannya.)

Regularizer berat pada setiap lapisan disimpan (dengan koefisien kekuatan regularisasi), tetapi regularisasi berat dari dalam pengoptimal (seperti tf.keras.optimizers.Ftrl.l1_regularization_strength=...) ) hilang. Beri tahu konsumen tentang SavedModel Anda.

Taman Model TensorFlow

Repo Taman Model TensorFlow berisi banyak contoh pembuatan Model Tersimpan TF2 yang dapat digunakan kembali untuk diunggah di l10n-tfhub.dev l10n .

Permintaan Komunitas

Tim TensorFlow Hub hanya menghasilkan sebagian kecil dari aset yang tersedia di l10n- tfhub.dev l10n. Kami terutama mengandalkan peneliti di Google dan Deepmind, lembaga penelitian korporat dan akademis, serta penggemar ML untuk menghasilkan model. Akibatnya, kami tidak dapat menjamin bahwa kami dapat memenuhi permintaan komunitas untuk aset tertentu, dan kami tidak dapat memberikan perkiraan waktu untuk ketersediaan aset baru.

Pencapaian Permintaan Model Komunitas di bawah berisi permintaan dari komunitas untuk aset tertentu -- jika Anda atau seseorang yang Anda kenal tertarik untuk memproduksi aset dan membagikannya di l10n-tfhub.dev, kami menyambut kiriman!