หน้านี้อธิบายวิธีใช้ TensorFlow Hub ต่อไปในขณะที่ย้ายโค้ด TensorFlow จาก TensorFlow 1 ไปยัง TensorFlow 2 ซึ่งจะช่วยเสริม คู่มือการย้าย ทั่วไปของ TensorFlow
สำหรับ TF2 นั้น TF Hub ได้เปลี่ยนจาก hub.Module
แบบเดิม Module API สำหรับการสร้าง tf.compat.v1.Graph
เช่นเดียวกับ tf.contrib.v1.layers
ขณะนี้มี hub.KerasLayer
แทนสำหรับใช้ร่วมกับเลเยอร์ Keras อื่นๆ สำหรับการสร้าง tf.keras.Model
(โดยทั่วไปใน สภาพแวดล้อมการประมวลผลที่กระตือรือร้น ใหม่ของ TF2 ) และวิธีการ hub.load()
พื้นฐานสำหรับโค้ด TensorFlow ระดับต่ำ
hub.Module
API ยังคงมีอยู่ในไลบรารี tensorflow_hub
เพื่อใช้ใน TF1 และในโหมดความเข้ากันได้ของ TF1 ของ TF2 สามารถโหลดโมเดลใน รูปแบบ TF1 Hub เท่านั้น
API ใหม่ของ hub.load()
และ hub.KerasLayer
ใช้งานได้กับ TensorFlow 1.15 (ในโหมดกระตือรือร้นและกราฟ) และใน TensorFlow 2 API ใหม่นี้สามารถโหลดสินทรัพย์ TF2 SavedModel ใหม่ได้ และด้วยข้อจำกัดที่กำหนดไว้ใน โมเดล คู่มือความเข้ากันได้ รุ่นดั้งเดิมในรูปแบบ TF1 Hub
โดยทั่วไป ขอแนะนำให้ใช้ API ใหม่ทุกครั้งที่เป็นไปได้
สรุป API ใหม่
hub.load()
เป็นฟังก์ชันระดับต่ำใหม่ในการโหลด SavedModel จาก TensorFlow Hub (หรือบริการที่รองรับ) มันล้อม tf.saved_model.load()
ของ TF2 ; SavedModel Guide ของ TensorFlow จะอธิบายสิ่งที่คุณสามารถทำได้กับผลลัพธ์
m = hub.load(handle)
outputs = m(inputs)
คลาส hub.KerasLayer
เรียก hub.load()
และปรับผลลัพธ์เพื่อใช้ใน Keras ควบคู่ไปกับเลเยอร์ Keras อื่นๆ (อาจเป็น wrapper ที่สะดวกสำหรับ SavedModels ที่โหลดซึ่งใช้ในรูปแบบอื่น)
model = tf.keras.Sequential([
hub.KerasLayer(handle),
...])
บทช่วยสอนจำนวนมากแสดงการทำงานของ API เหล่านี้ นี่คือตัวอย่างบางส่วน:
การใช้ API ใหม่ในการฝึกอบรมเครื่องมือประมาณค่า
หากคุณใช้ TF2 SavedModel ใน Estimator สำหรับการฝึกกับเซิร์ฟเวอร์พารามิเตอร์ (หรืออย่างอื่นในเซสชัน TF1 ที่มีตัวแปรวางไว้บนอุปกรณ์ระยะไกล) คุณจะต้องตั้งค่า experimental.share_cluster_devices_in_session
ใน ConfigProto ของ tf.Session ไม่เช่นนั้นคุณจะได้รับข้อผิดพลาด เช่น "อุปกรณ์ที่ได้รับมอบหมาย '/job:ps/replica:0/task:0/device:CPU:0' ไม่ตรงกับอุปกรณ์ใดๆ"
ตัวเลือกที่จำเป็นสามารถตั้งค่าได้เช่น
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)
ตั้งแต่ TF2.2 เป็นต้นไป ตัวเลือกนี้จะไม่ถือเป็นการทดลองอีกต่อไป และสามารถดรอปชิ้นส่วน . .experimental
ได้
กำลังโหลดโมเดลรุ่นเก่าในรูปแบบ TF1 Hub
อาจเกิดขึ้นได้ว่า TF2 SavedModel ใหม่ยังไม่พร้อมใช้งานสำหรับกรณีการใช้งานของคุณ และคุณจำเป็นต้องโหลดโมเดลเดิมในรูปแบบ TF1 Hub เริ่มต้นใน tensorflow_hub
รีลีส 0.7 คุณสามารถใช้โมเดลดั้งเดิมในรูปแบบ TF1 Hub ร่วมกับ hub.KerasLayer
ดังที่แสดงด้านล่าง:
m = hub.KerasLayer(handle)
tensor_out = m(tensor_in)
นอกจากนี้ KerasLayer
ยังเปิดเผยความสามารถในการระบุ tags
, signature
, output_key
และ signature_outputs_as_dict
สำหรับการใช้งานที่เฉพาะเจาะจงมากขึ้นของโมเดลรุ่นเก่าในรูปแบบ TF1 Hub และ SavedModels รุ่นเก่า
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความเข้ากันได้ของรูปแบบ TF1 Hub โปรดดู คู่มือความเข้ากันได้ของรุ่น
การใช้ API ระดับล่าง
สามารถโหลดโมเดลรูปแบบ TF1 Hub รุ่นเก่าได้ผ่าน tf.saved_model.load
แทน
# DEPRECATED: TensorFlow 1
m = hub.Module(handle, tags={"foo", "bar"})
tensors_out_dict = m(dict(x1=..., x2=...), signature="sig", as_dict=True)
ขอแนะนำให้ใช้:
# TensorFlow 2
m = hub.load(path, tags={"foo", "bar"})
tensors_out_dict = m.signatures["sig"](x1=..., x2=...)
ในตัวอย่างเหล่านี้ m.signatures
คือคำสั่งของ ฟังก์ชันคอนกรีต ของ TensorFlow ที่คีย์ด้วยชื่อลายเซ็น การเรียกใช้ฟังก์ชันดังกล่าวจะคำนวณเอาต์พุตทั้งหมด แม้ว่าจะไม่ได้ใช้ก็ตาม (ซึ่งแตกต่างจากการประเมินแบบขี้เกียจของโหมดกราฟของ TF1)