Masalah umum

Jika masalah Anda tidak tercantum di sini, silakan cari masalah di github sebelum mengisi masalah baru.

TypeError: Objek 'AutoTrackable' tidak dapat dipanggil

# BAD: Raises error
embed = hub.load('https://tfhub.dev/google/nnlm-en-dim128/1')
embed(['my text', 'batch'])

Kesalahan ini sering muncul saat memuat model dalam format TF1 Hub dengan hub.load() API di TF2. Menambahkan tanda tangan yang benar akan mengatasi masalah ini. Lihat panduan migrasi TF-Hub untuk TF2 untuk detail selengkapnya tentang perpindahan ke TF2 dan penggunaan model dalam format TF1 Hub di TF2.


embed = hub.load('https://tfhub.dev/google/nnlm-en-dim128/1')
embed.signatures['default'](['my text', 'batch'])

Tidak dapat mengunduh modul

Dalam proses penggunaan modul dari URL ada banyak kesalahan yang dapat muncul karena tumpukan jaringan. Seringkali ini merupakan masalah khusus pada mesin yang menjalankan kode dan bukan masalah pada perpustakaan. Berikut adalah daftar yang umum:

  • "EOF terjadi karena pelanggaran protokol" - Masalah ini mungkin terjadi jika versi python yang diinstal tidak mendukung persyaratan TLS dari server yang menghosting modul. Khususnya, python 2.7.5 diketahui gagal menyelesaikan modul dari domain tfhub.dev. MEMPERBAIKI : Harap perbarui ke versi python yang lebih baru.

  • "tidak dapat memverifikasi sertifikat tfhub.dev" - Masalah ini mungkin terjadi jika sesuatu di jaringan mencoba bertindak sebagai dev gTLD. Sebelum .dev digunakan sebagai gTLD, pengembang dan kerangka kerja terkadang menggunakan nama .dev untuk membantu pengujian kode. MEMPERBAIKI: Identifikasi dan konfigurasi ulang perangkat lunak yang mencegat resolusi nama di domain ".dev".

  • Kegagalan menulis ke direktori cache /tmp/tfhub_modules (atau serupa): lihat Caching untuk mengetahui apa itu dan bagaimana mengubah lokasinya.

Jika kesalahan dan perbaikan di atas tidak berhasil, seseorang dapat mencoba mengunduh modul secara manual dengan menyimulasikan protokol melampirkan ?tf-hub-format=compressed ke URL untuk mengunduh file terkompresi tar yang harus didekompresi secara manual ke lokal mengajukan. Jalur ke file lokal kemudian dapat digunakan sebagai pengganti URL. Berikut ini contoh singkatnya:

# Create a folder for the TF hub module.
$ mkdir /tmp/moduleA
# Download the module, and uncompress it to the destination folder. You might want to do this manually.
$ curl -L "https://tfhub.dev/google/universal-sentence-encoder/2?tf-hub-format=compressed" | tar -zxvC /tmp/moduleA
# Test to make sure it works.
$ python
> import tensorflow_hub as hub
> hub.Module("/tmp/moduleA")

Menjalankan inferensi pada modul yang telah diinisialisasi sebelumnya

Jika Anda menulis program Python yang menerapkan modul berkali-kali pada input data, Anda dapat menerapkan resep berikut. (Catatan: Untuk melayani permintaan di layanan produksi, pertimbangkan TensorFlow Serving atau solusi lain yang dapat diskalakan dan bebas Python.)

Dengan asumsi model kasus penggunaan Anda adalah inisialisasi dan permintaan berikutnya (misalnya Django, Flask, server HTTP khusus, dll.), Anda dapat mengatur penyajiannya sebagai berikut:

Model Tersimpan TF2

  • Di bagian inisialisasi:
    • Muat model TF2.0.
import tensorflow_hub as hub

embedding_fn = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")
  • Di bagian permintaan:
    • Gunakan fungsi penyematan untuk menjalankan inferensi.
embedding_fn(["Hello world"])

Panggilan tf.function ini dioptimalkan untuk kinerja, lihat panduan tf.function .

Modul Hub TF1

  • Di bagian inisialisasi:
    • Buat grafik dengan placeholder - titik masuk ke dalam grafik.
    • Inisialisasi sesi.
import tensorflow as tf
import tensorflow_hub as hub

# Create graph and finalize (finalizing optional but recommended).
g = tf.Graph()
with g.as_default():
  # We will be feeding 1D tensors of text into the graph.
  text_input = tf.placeholder(dtype=tf.string, shape=[None])
  embed = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")
  embedded_text = embed(text_input)
  init_op = tf.group([tf.global_variables_initializer(), tf.tables_initializer()])
g.finalize()

# Create session and initialize.
session = tf.Session(graph=g)
session.run(init_op)
  • Di bagian permintaan:
    • Gunakan sesi untuk memasukkan data ke dalam grafik melalui placeholder.
result = session.run(embedded_text, feed_dict={text_input: ["Hello world"]})

Tidak dapat mengubah tipe d model (misalnya, float32 ke bfloat16)

SavedModels TensorFlow (dibagikan di TF Hub atau lainnya) berisi operasi yang berfungsi pada tipe data tetap (seringkali, float32 untuk bobot dan aktivasi perantara jaringan neural). Ini tidak dapat diubah setelah memuat SavedModel (tetapi penerbit model dapat memilih untuk menerbitkan model berbeda dengan tipe data berbeda).

Perbarui versi model

Metadata dokumentasi versi model dapat diperbarui. Namun, aset versi (file model) tidak dapat diubah. Jika ingin mengubah aset model, Anda dapat memublikasikan versi model yang lebih baru. Merupakan praktik yang baik untuk memperluas dokumentasi dengan log perubahan yang menjelaskan apa yang berubah antar versi.