การย้ายจาก TF1 เป็น TF2 ด้วย TensorFlow Hub

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

หน้านี้อธิบายวิธีใช้ TensorFlow Hub ต่อไปในขณะที่ย้ายรหัส TensorFlow จาก TensorFlow 1 ไปเป็น TensorFlow 2 ซึ่งช่วยเสริมแนวทางการ โยกย้าย ทั่วไปของ TensorFlow

สำหรับ TF2 TF Hub ได้เปลี่ยนจาก hub.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 ของ TensorFlow อธิบายสิ่งที่คุณสามารถทำได้กับผลลัพธ์

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

คลาส hub.KerasLayer เรียก hub.load() และปรับผลลัพธ์เพื่อใช้ใน Keras ควบคู่ไปกับเลเยอร์ Keras อื่นๆ (อาจเป็นเครื่องห่อหุ้มที่สะดวกสำหรับ SavedModels ที่โหลดซึ่งใช้ในรูปแบบอื่น)

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

บทช่วยสอนจำนวนมากแสดงการทำงานของ API เหล่านี้ ดูเป็นพิเศษ

การใช้ API ใหม่ในการฝึกอบรมเครื่องมือประมาณการ

หากคุณใช้ TF2 SavedModel ในตัวประมาณการสำหรับการฝึกอบรมกับเซิร์ฟเวอร์พารามิเตอร์ (หรือในเซสชัน 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)

เริ่มต้นด้วย .experimental ตัวเลือกนี้ไม่มีการทดลองอีกต่อไป และสามารถทิ้งชิ้นส่วน .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)