หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

โอนย้ายจาก 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 (หรือบริการที่เข้ากันได้) มันล้อมรอบ TF2 ของ tf.saved_model.load() ; คู่มือ SavedModel ของ 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 ในประมาณการสำหรับการฝึกอบรมกับเซิร์ฟเวอร์พารามิเตอร์ (หรือมิฉะนั้นใน TF1 เซสชันกับตัวแปรที่วางอยู่บนอุปกรณ์จากระยะไกล), คุณต้องตั้ง experimental.share_cluster_devices_in_session ใน tf.Session ของ ConfigProto หรืออื่น ๆ คุณจะได้รับข้อผิดพลาด เช่น "อุปกรณ์ที่ได้รับมอบหมาย '/ งาน: ps / จำลอง: 0 / งาน: 0 / อุปกรณ์: 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)