Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Bermigrasi dari TF1 ke TF2 dengan TensorFlow Hub

Halaman ini menjelaskan cara tetap menggunakan TensorFlow Hub sambil memigrasi kode TensorFlow Anda dari TensorFlow 1 ke TensorFlow 2. Ini melengkapi panduan migrasi umum TensorFlow.

Untuk TF2, TF Hub telah beralih dari hub.Module legacy. API API untuk membangun tf.compat.v1.Graph seperti tf.contrib.v1.layers lakukan. Sebaliknya, sekarang ada hub.KerasLayer untuk digunakan bersama lapisan Keras lainnya untuk membangun tf.keras.Model (biasanya di lingkungan eksekusi bersemangat baru TF2) dan metode hub.load() mendasarinya untuk kode TensorFlow tingkat rendah.

hub.Module API tetap tersedia di perpustakaan tensorflow_hub untuk digunakan dalam TF1 dan dalam mode kompatibilitas TF1 dari TF2. Itu hanya dapat memuat model dalam format TF1 Hub .

API baru hub.load() dan hub.KerasLayer bekerja untuk TensorFlow 1.15 (dalam mode eager dan graph) dan di TensorFlow 2. API baru ini dapat memuat aset TF2 SavedModel baru, dan, dengan batasan yang ditetapkan dalam model panduan kompatibilitas , model lawas dalam format TF1 Hub.

Secara umum, disarankan untuk menggunakan API baru sedapat mungkin.

Ringkasan API baru

hub.load() adalah fungsi tingkat rendah baru untuk memuat SavedModel dari TensorFlow Hub (atau layanan yang kompatibel). Ini membungkus tf.saved_model.load() TF2; TensorFlow's SavedModel Guide menjelaskan apa yang dapat Anda lakukan dengan hasilnya.

 m = hub.load(handle)
outputs = m(inputs)
 

Kelas hub.KerasLayer memanggil hub.load() dan menyesuaikan hasilnya untuk digunakan dalam Keras bersama lapisan Keras lainnya. (Bahkan mungkin pembungkus yang nyaman untuk loaded SavedModels yang digunakan dengan cara lain.)

 model = tf.keras.Sequential([
    hub.KerasLayer(handle),
    ...])
 

Banyak tutorial menunjukkan API ini beraksi. Lihat khususnya

Menggunakan API baru dalam pelatihan Pengukur

Jika Anda menggunakan TF2 SavedModel di Estimator untuk pelatihan dengan server parameter (atau sebaliknya dalam Sesi TF1 dengan variabel yang ditempatkan pada perangkat jarak jauh), Anda perlu menetapkan experimental.share_cluster_devices_in_session di tf.Session's ConfigProto, atau Anda akan mendapatkan kesalahan seperti "Perangkat yang ditugaskan '/ pekerjaan: ps / replika: 0 / tugas: 0 / perangkat: CPU: 0' tidak cocok dengan perangkat apa pun."

Opsi yang diperlukan dapat diatur seperti

 session_config = tf.compat.v1.ConfigProto()
session_config.experimental.share_cluster_devices_in_session = True
run_config = tf.estimator.RunConfig(..., session_config=session_config)
estimator = tf.estimator.Estimator(..., config=run_config)
 

Dimulai dengan TF2.2, opsi ini tidak lagi eksperimental, dan potongan .experimental dapat dijatuhkan.

Memuat model lawas dalam format TF1 Hub

Dapat terjadi bahwa TF2 SavedModel baru belum tersedia untuk kasus penggunaan Anda dan Anda perlu memuat model lama dalam format Hub TF1. Mulai dalam tensorflow_hub rilis 0.7, Anda dapat menggunakan model lama dalam format TF1 Hub bersama dengan hub.KerasLayer seperti yang ditunjukkan di bawah ini:

 m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
 

Selain itu KerasLayer memperlihatkan kemampuan untuk menentukan tags , signature , output_key dan signature_outputs_as_dict untuk penggunaan model legasi yang lebih spesifik dalam format TF1 Hub dan warisan SavedModels.

Untuk informasi lebih lanjut tentang kompatibilitas format TF1 Hub, lihat panduan kompatibilitas model .

Menggunakan API tingkat rendah

Model format Hub Legacy TF1 dapat dimuat melalui tf.saved_model.load . Dari pada

 # DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)
 

disarankan untuk menggunakan:

 # TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)
 

Dalam contoh-contoh ini m.signatures adalah dikt dari fungsi konkret TensorFlow dikunci dengan nama tanda tangan. Memanggil fungsi seperti itu menghitung semua outputnya, bahkan jika tidak digunakan. (Ini berbeda dari evaluasi malas mode grafik TF1.)