ปัญหาที่พบได้ทั่วไป

หากปัญหาของคุณไม่อยู่ในรายการที่นี่ โปรดค้นหา ปัญหา GitHub ก่อนที่จะกรอกปัญหาใหม่

TypeError: วัตถุ 'ติดตามอัตโนมัติ' ไม่สามารถเรียกได้

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

ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อโหลดโมเดลในรูปแบบ TF1 Hub ด้วย hub.load() API ใน TF2 การเพิ่มลายเซ็นที่ถูกต้องควรแก้ไขปัญหานี้ได้ ดู คู่มือการย้าย TF-Hub สำหรับ TF2 สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการย้ายไปยัง TF2 และการใช้โมเดลในรูปแบบ TF1 Hub ใน TF2


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

ไม่สามารถดาวน์โหลดโมดูลได้

ในกระบวนการใช้โมดูลจาก URL มีข้อผิดพลาดมากมายที่สามารถแสดงได้เนื่องจากสแต็กเครือข่าย บ่อยครั้งนี่เป็นปัญหาเฉพาะกับเครื่องที่ใช้งานโค้ด ไม่ใช่ปัญหากับไลบรารี นี่คือรายการรายการทั่วไป:

  • "EOF เกิดขึ้นในการละเมิดโปรโตคอล" - มีแนวโน้มที่จะเกิดปัญหานี้หากเวอร์ชัน Python ที่ติดตั้งไม่รองรับข้อกำหนด TLS ของเซิร์ฟเวอร์ที่โฮสต์โมดูล โดยเฉพาะอย่างยิ่ง python 2.7.5 เป็นที่ทราบกันว่าล้มเหลวในการแก้ไขโมดูลจากโดเมน tfhub.dev การแก้ไข : โปรดอัปเดตเป็นเวอร์ชันหลามที่ใหม่กว่า

  • "ไม่สามารถตรวจสอบใบรับรองของ tfhub.dev" - ปัญหานี้มีแนวโน้มที่จะเกิดขึ้นหากมีบางสิ่งบนเครือข่ายพยายามทำหน้าที่เป็น dev gTLD ก่อนที่ .dev จะถูกใช้เป็น gTLD บางครั้งนักพัฒนาและเฟรมเวิร์กจะใช้ชื่อ .dev เพื่อช่วยทดสอบโค้ด การแก้ไข: ระบุและกำหนดค่าซอฟต์แวร์ที่ขัดขวางการจำแนกชื่อในโดเมน ".dev" ใหม่

  • ความล้มเหลวในการเขียนไปยังไดเร็กทอรีแคช /tmp/tfhub_modules (หรือที่คล้ายกัน): โปรดดู การแคช สำหรับสิ่งที่เป็นอยู่และวิธีเปลี่ยนตำแหน่ง

หากข้อผิดพลาดและการแก้ไขข้างต้นไม่ได้ผล คุณสามารถลองดาวน์โหลดโมดูลด้วยตนเองโดยการจำลองโปรโตคอลของการแนบ ?tf-hub-format=compressed ไปยัง URL เพื่อดาวน์โหลดไฟล์บีบอัด tar ที่ต้องแตกไฟล์ด้วยตนเองลงในไฟล์ท้องถิ่น ไฟล์. คุณสามารถใช้เส้นทางไปยังไฟล์ในเครื่องแทน URL ได้ นี่เป็นตัวอย่างสั้นๆ:

# 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")

เรียกใช้การอนุมานบนโมดูลที่เตรียมใช้งานล่วงหน้า

หากคุณกำลังเขียนโปรแกรม Python ที่ใช้โมดูลกับข้อมูลอินพุตหลายครั้ง คุณสามารถใช้สูตรต่อไปนี้ได้ (หมายเหตุ: สำหรับการให้บริการตามคำขอในบริการการใช้งานจริง ให้พิจารณา การให้บริการ TensorFlow หรือโซลูชันอื่นๆ ที่ปรับขนาดได้และไม่ใช้ Python)

สมมติว่าโมเดลการใช้งานของคุณเป็นการ เริ่มต้น และ คำขอ ที่ตามมา (เช่น Django, Flask, เซิร์ฟเวอร์ HTTP แบบกำหนดเอง ฯลฯ) คุณสามารถตั้งค่าการให้บริการได้ดังต่อไปนี้:

โมเดลที่บันทึกไว้ TF2

  • ในส่วนของการเริ่มต้น:
    • โหลดรุ่น TF2.0
import tensorflow_hub as hub

embedding_fn = hub.load("https://tfhub.dev/google/universal-sentence-encoder/4")
  • ในส่วนคำขอ:
    • ใช้ฟังก์ชันการฝังเพื่อเรียกใช้การอนุมาน
embedding_fn(["Hello world"])

การเรียกใช้ tf.function นี้ได้รับการปรับให้เหมาะสมเพื่อประสิทธิภาพ โปรดดู คำแนะนำ tf.function

โมดูลฮับ TF1

  • ในส่วนของการเริ่มต้น:
    • สร้างกราฟด้วย ตัวยึดตำแหน่ง - จุดเริ่มต้นเข้าสู่กราฟ
    • เริ่มต้นเซสชัน
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)
  • ในส่วนคำขอ:
    • ใช้เซสชันเพื่อป้อนข้อมูลลงในกราฟผ่านตัวยึดตำแหน่ง
result = session.run(embedded_text, feed_dict={text_input: ["Hello world"]})

ไม่สามารถเปลี่ยน dtype ของโมเดลได้ (เช่น float32 เป็น bfloat16)

SavedModels ของ TensorFlow (แชร์บน TF Hub หรืออย่างอื่น) มีการดำเนินการที่ทำงานกับประเภทข้อมูลคงที่ (บ่อยครั้งคือ float32 สำหรับน้ำหนักและการเปิดใช้งานระดับกลางของโครงข่ายประสาทเทียม) สิ่งเหล่านี้ไม่สามารถเปลี่ยนแปลงได้หลังจากโหลด SavedModel แล้ว (แต่ผู้เผยแพร่โมเดลสามารถเลือกที่จะเผยแพร่โมเดลที่แตกต่างกันด้วยประเภทข้อมูลที่แตกต่างกัน)

อัปเดตเวอร์ชันของโมเดล

สามารถอัปเดตข้อมูลเมตาเอกสารประกอบของเวอร์ชันโมเดลได้ อย่างไรก็ตาม เนื้อหาของเวอร์ชัน (ไฟล์โมเดล) จะไม่เปลี่ยนรูป หากคุณต้องการเปลี่ยนสินทรัพย์แบบจำลอง คุณสามารถเผยแพร่แบบจำลองเวอร์ชันที่ใหม่กว่าได้ แนวทางปฏิบัติที่ดีในการขยายเอกสารประกอบด้วยบันทึกการเปลี่ยนแปลงที่อธิบายสิ่งที่เปลี่ยนแปลงระหว่างเวอร์ชันต่างๆ