โมเดลที่บันทึกไว้ที่นำกลับมาใช้ใหม่, โมเดลที่บันทึกไว้ที่นำกลับมาใช้ใหม่ได้

บทนำ

TensorFlow Hub โฮสต์ SavedModels สำหรับ TensorFlow 2 รวมถึงทรัพย์สินอื่นๆ สามารถโหลดกลับเข้าไปในโปรแกรม Python ด้วย obj = hub.load(url) [ เรียนรู้เพิ่มเติม ] obj ที่ส่งคืนเป็นผลของ tf.saved_model.load() (ดู คู่มือ SavedModel ของ TensorFlow ) ออบเจ็กต์นี้สามารถมีแอททริบิวต์ตามอำเภอใจได้ นั่นคือ tf.functions, tf.Variables (เริ่มต้นจากค่าที่ฝึกไว้ล่วงหน้า) ทรัพยากรอื่นๆ และอ็อบเจกต์ดังกล่าวแบบเรียกซ้ำ

หน้านี้อธิบายอินเทอร์เฟซที่จะถูกใช้งานโดย obj ที่โหลด เพื่อ นำกลับมาใช้ใหม่ ในโปรแกรม TensorFlow Python SavedModels ที่สอดคล้องกับอินเทอร์เฟซนี้เรียกว่า Reusable SavedModels

การนำกลับมาใช้ใหม่หมายถึงการสร้างโมเดลขนาดใหญ่ขึ้นรอบ ๆ obj รวมถึงความสามารถในการปรับแต่ง การปรับละเอียดหมายถึงการฝึกตุ้มน้ำหนักเพิ่มเติมใน obj ที่โหลดโดยเป็นส่วนหนึ่งของโมเดลโดยรอบ ฟังก์ชันการสูญเสียและเครื่องมือเพิ่มประสิทธิภาพถูกกำหนดโดยโมเดลโดยรอบ obj กำหนดเฉพาะการแมปของอินพุตกับการเปิดใช้งานเอาต์พุต ("forward pass") ซึ่งอาจรวมถึงเทคนิคต่างๆ เช่น การออกกลางคันหรือการทำให้แบตช์เป็นมาตรฐาน

ทีม TensorFlow Hub ขอแนะนำให้ใช้อินเทอร์เฟซ SavedModel ที่นำกลับมาใช้ใหม่ได้ใน SavedModels ทั้งหมดที่มีขึ้นเพื่อนำกลับมาใช้ใหม่ตามความหมายข้างต้น ยูทิลิตีจำนวนมากจากไลบรารี tensorflow_hub โดยเฉพาะ hub.KerasLayer ต้องการ SavedModels เพื่อนำไปใช้

ความสัมพันธ์กับ SignatureDefs

อินเทอร์เฟซนี้ในแง่ของ tf.functions และคุณลักษณะ TF2 อื่น ๆ นั้นแยกจากลายเซ็นของ SavedModel ซึ่งมีให้ใช้งานตั้งแต่ TF1 และยังคงใช้ใน TF2 สำหรับการอนุมาน (เช่น การปรับใช้ SavedModels กับ TF Serving หรือ TF Lite) ลายเซ็นสำหรับการอนุมานไม่ได้แสดงออกมากพอที่จะสนับสนุนการปรับแต่งอย่างละเอียด และ tf.function ให้ Python API ที่เป็นธรรมชาติและแสดงออกมากขึ้นสำหรับโมเดลที่นำกลับมาใช้ใหม่

ความสัมพันธ์กับห้องสมุดสร้างแบบจำลอง

SavedModel ที่นำกลับมาใช้ใหม่ได้ใช้เฉพาะ TensorFlow 2 primitives เท่านั้น โดยไม่ขึ้นกับไลบรารีการสร้างแบบจำลองใดๆ เช่น Keras หรือ Sonnet สิ่งนี้อำนวยความสะดวกในการใช้ซ้ำในไลบรารีการสร้างแบบจำลอง โดยปราศจากการพึ่งพารหัสการสร้างแบบจำลองดั้งเดิม

จำเป็นต้องมีการดัดแปลงจำนวนหนึ่งโหลด SavedModels ที่นำกลับมาใช้ใหม่ได้ลงในหรือบันทึกจากไลบรารีการสร้างแบบจำลองที่กำหนด สำหรับ Keras นั้น hub.KerasLayer ให้การโหลด และการบันทึกในตัวของ Keras ในรูปแบบ SavedModel ได้รับการออกแบบใหม่สำหรับ TF2 โดยมีเป้าหมายในการจัดหา superset ของอินเทอร์เฟซนี้ (ดู RFC ตั้งแต่เดือนพฤษภาคม 2019)

ความสัมพันธ์กับงานเฉพาะ "Common SavedModel APIs"

คำจำกัดความของอินเทอร์เฟซในหน้านี้อนุญาตให้ใช้อินพุตและเอาต์พุตจำนวนและประเภทใดก็ได้ Common SavedModel APIs สำหรับ TF Hub ปรับแต่งอินเทอร์เฟซทั่วไปนี้ด้วยข้อตกลงการใช้งานสำหรับงานเฉพาะ เพื่อทำให้โมเดลสามารถสับเปลี่ยนได้อย่างง่ายดาย

คำจำกัดความของอินเทอร์เฟซ

คุณลักษณะ

SavedModel ที่นำกลับมาใช้ใหม่ได้คือ TensorFlow 2 SavedModel ที่ obj = tf.saved_model.load(...) ส่งคืนอ็อบเจ็กต์ที่มีแอตทริบิวต์ต่อไปนี้

  • __call__ . ที่จำเป็น. tf.function ที่ใช้การคำนวณของโมเดล ("forward pass") ขึ้นอยู่กับข้อกำหนดด้านล่าง

  • variables : รายการของอ็อบเจ็กต์ tf.Variable ซึ่งแสดงรายการตัวแปรทั้งหมดที่ใช้โดยการเรียก __call__ ที่เป็นไปได้ รวมถึงตัวแปรที่ฝึกได้และไม่สามารถฝึกได้

    รายการนี้สามารถละเว้นได้ถ้าว่างเปล่า

  • trainable_variables : รายการของอ็อบเจ็กต์ tf.Variable ที่ v.trainable เป็นจริงสำหรับองค์ประกอบทั้งหมด ตัวแปรเหล่านี้ต้องเป็นสับเซตของ variables สิ่งเหล่านี้คือตัวแปรที่ต้องฝึกฝนเมื่อทำการปรับแต่งวัตถุ ผู้สร้าง SavedModel อาจเลือกที่จะละเว้นตัวแปรบางตัวที่นี่ซึ่งเดิมสามารถฝึกได้เพื่อระบุว่าไม่ควรแก้ไขตัวแปรเหล่านี้ในระหว่างการปรับละเอียด

    รายการนี้สามารถละเว้นได้ถ้าว่าง โดยเฉพาะอย่างยิ่ง ถ้า SavedModel ไม่สนับสนุนการปรับแต่ง

  • regularization_losses : รายการของ tf.functions ซึ่งแต่ละอันรับอินพุตเป็นศูนย์และส่งคืนเทนเซอร์สเกลาร์โฟลตตัวเดียว สำหรับการปรับละเอียด ผู้ใช้ SavedModel ขอแนะนำให้รวมเงื่อนไขเหล่านี้เป็นเงื่อนไขการทำให้เป็นมาตรฐานเพิ่มเติมในการสูญเสีย (ในกรณีที่ง่ายที่สุดโดยไม่ต้องปรับขนาดเพิ่มเติม) โดยทั่วไปแล้ว สิ่งเหล่านี้จะใช้เพื่อแสดงตัวกำหนดน้ำหนัก (หากไม่มีอินพุต ฟังก์ชัน tf.function เหล่านี้ไม่สามารถแสดงตัวปรับกิจกรรมให้เป็นปกติได้)

    รายการนี้สามารถละเว้นได้ถ้าว่าง โดยเฉพาะอย่างยิ่ง ถ้า SavedModel ไม่สนับสนุนการปรับละเอียดหรือไม่ต้องการกำหนดน้ำหนักให้เป็นมาตรฐาน

ฟังก์ชัน __call__

obj ที่บันทึกไว้ในโมเดลที่กู้คืนมีแอตทริบิวต์ obj obj.__call__ ที่เป็น tf.function ที่กู้คืนและอนุญาตให้เรียก obj ดังต่อไปนี้

เรื่องย่อ (รหัสหลอก):

outputs = obj(inputs, trainable=..., **kwargs)

ข้อโต้แย้ง

อาร์กิวเมนต์มีดังนี้

  • มีอาร์กิวเมนต์หนึ่งตำแหน่งที่ต้องการพร้อมชุดการเปิดใช้งานอินพุตของ SavedModel ประเภทของมันคือหนึ่งใน

    • เทนเซอร์ตัวเดียวสำหรับอินพุตเดียว
    • รายการเทนเซอร์สำหรับลำดับอินพุตที่ไม่มีชื่อ
    • คำสั่งของเทนเซอร์ที่ใส่ชุดของชื่ออินพุตเฉพาะ

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

  • อาจมีการ training อาร์กิวเมนต์คีย์เวิร์ดที่เป็นทางเลือกที่ยอมรับ Python boolean, True หรือ False ค่าเริ่มต้นคือ False หากโมเดลสนับสนุนการปรับละเอียด และหากการคำนวณแตกต่างกันระหว่างทั้งสอง (เช่น ในการออกกลางคันและการปรับให้เป็นมาตรฐานแบบกลุ่ม) ความแตกต่างนั้นจะถูกนำไปใช้กับอาร์กิวเมนต์นี้ มิฉะนั้น อาร์กิวเมนต์นี้อาจขาดหายไป

    ไม่จำเป็นที่ __call__ ยอมรับอาร์กิวเมนต์ training ที่มีค่าเทนเซอร์ มันขึ้นอยู่กับผู้โทรที่จะใช้ tf.cond() หากจำเป็นต้องส่งระหว่างกัน

  • ผู้สร้าง SavedModel อาจเลือกที่จะยอมรับ kwargs เพิ่มเติมของชื่อเฉพาะ

    • สำหรับอาร์กิวเมนต์ที่มีค่าเทนเซอร์ ผู้สร้าง SavedModel กำหนด dtypes และรูปร่างที่อนุญาต tf.function ยอมรับค่าเริ่มต้นของ Python บนอาร์กิวเมนต์ที่ติดตามด้วยอินพุต tf.TensorSpec อาร์กิวเมนต์ดังกล่าวสามารถใช้เพื่อปรับแต่งไฮเปอร์พารามิเตอร์ที่เป็นตัวเลขที่เกี่ยวข้องกับ __call__ (เช่น อัตราการออกกลางคัน)

    • สำหรับอาร์กิวเมนต์ที่มีค่า Python ผู้สร้าง SavedModel จะกำหนดค่าที่อนุญาต อาร์กิวเมนต์ดังกล่าวสามารถใช้เป็นแฟล็กเพื่อสร้างตัวเลือกที่ไม่ต่อเนื่องในฟังก์ชันที่ติดตาม

ฟังก์ชัน __call__ ที่กู้คืนต้องจัดเตรียมการติดตามสำหรับอาร์กิวเมนต์ที่อนุญาตทั้งหมดรวมกัน การพลิก training ระหว่าง True และ False ต้องไม่เปลี่ยนการอนุญาตของอาร์กิวเมนต์

ผลลัพธ์

outputs จากการเรียก obj สามารถเป็น

  • เทนเซอร์ตัวเดียวสำหรับเอาต์พุตเดี่ยว
  • รายการเทนเซอร์สำหรับลำดับเอาต์พุตที่ไม่มีชื่อ
  • dict ของ Tensors ที่คีย์โดยชุดของชื่อเอาต์พุตเฉพาะ

(การแก้ไขในอนาคตของอินเทอร์เฟซนี้อาจอนุญาตให้มีการซ้อนทั่วไปมากขึ้น) ประเภทการส่งคืนอาจแตกต่างกันไปขึ้นอยู่กับ kwargs ที่มีค่า Python ซึ่งช่วยให้แฟล็กสร้างเอาต์พุตพิเศษได้ ผู้สร้าง SavedModel กำหนด dtypes และรูปร่างของเอาต์พุตและการพึ่งพาอินพุต

ชื่อเรียกได้

SavedModel ที่นำกลับมาใช้ใหม่ได้สามารถจัดเตรียมชิ้นส่วนของแบบจำลองได้หลายแบบตามที่อธิบายไว้ข้างต้นโดยใส่ไว้ในอ็อบเจกต์ย่อยที่มีชื่อ เช่น obj.foo , obj.bar และอื่นๆ แต่ละอ็อบเจ็กต์ย่อยจัดเตรียมเมธอด __call__ และคุณลักษณะที่สนับสนุนเกี่ยวกับตัวแปร ฯลฯ เฉพาะสำหรับชิ้นส่วนของโมเดลนั้น สำหรับตัวอย่างข้างต้น จะมี obj.foo.__call__ , obj.foo.variables และอื่นๆ

โปรดทราบว่าอินเทอร์เฟซนี้ ไม่ ครอบคลุมวิธีการเพิ่ม tf.function เปล่าโดยตรงเป็น tf.foo

ผู้ใช้ SavedModels ที่นำกลับมาใช้ใหม่ได้รับการคาดหวังให้จัดการการซ้อนระดับเดียวเท่านั้น ( obj.bar แต่ไม่ใช่ obj.bar.baz ) (การแก้ไขในอนาคตของอินเทอร์เฟซนี้อาจอนุญาตให้ซ้อนลึกได้ และอาจยกเว้นข้อกำหนดที่อ็อบเจ็กต์ระดับบนสุดสามารถเรียกได้เอง)

คำกล่าวปิดงาน

ความสัมพันธ์กับ API ในกระบวนการ

เอกสารนี้อธิบายส่วนต่อประสานของคลาส Python ซึ่งประกอบด้วย primitives เช่น tf.function และ tf.Variable ที่คงอยู่แบบไปกลับผ่านการทำให้เป็นอนุกรมผ่าน tf.saved_model.save() และ tf.saved_model.load() อย่างไรก็ตาม อินเทอร์เฟซมีอยู่แล้วบนวัตถุดั้งเดิมที่ส่งผ่านไปยัง tf.saved_model.save() การปรับให้เข้ากับอินเทอร์เฟซนั้นทำให้สามารถแลกเปลี่ยนชิ้นส่วนแบบจำลองระหว่าง API การสร้างแบบจำลองภายในโปรแกรม TensorFlow เดียว

,

บทนำ

TensorFlow Hub โฮสต์ SavedModels สำหรับ TensorFlow 2 รวมถึงทรัพย์สินอื่นๆ สามารถโหลดกลับเข้าไปในโปรแกรม Python ด้วย obj = hub.load(url) [ เรียนรู้เพิ่มเติม ] obj ที่ส่งคืนเป็นผลของ tf.saved_model.load() (ดู คู่มือ SavedModel ของ TensorFlow ) ออบเจ็กต์นี้สามารถมีแอททริบิวต์ตามอำเภอใจได้ นั่นคือ tf.functions, tf.Variables (เริ่มต้นจากค่าที่ฝึกไว้ล่วงหน้า) ทรัพยากรอื่นๆ และอ็อบเจกต์ดังกล่าวแบบเรียกซ้ำ

หน้านี้อธิบายอินเทอร์เฟซที่จะถูกใช้งานโดย obj ที่โหลด เพื่อ นำกลับมาใช้ใหม่ ในโปรแกรม TensorFlow Python SavedModels ที่สอดคล้องกับอินเทอร์เฟซนี้เรียกว่า Reusable SavedModels

การนำกลับมาใช้ใหม่หมายถึงการสร้างโมเดลขนาดใหญ่ขึ้นรอบ ๆ obj รวมถึงความสามารถในการปรับแต่ง การปรับละเอียดหมายถึงการฝึกตุ้มน้ำหนักเพิ่มเติมใน obj ที่โหลดโดยเป็นส่วนหนึ่งของโมเดลโดยรอบ ฟังก์ชันการสูญเสียและเครื่องมือเพิ่มประสิทธิภาพถูกกำหนดโดยโมเดลโดยรอบ obj กำหนดเฉพาะการแมปของอินพุตกับการเปิดใช้งานเอาต์พุต ("forward pass") ซึ่งอาจรวมถึงเทคนิคต่างๆ เช่น การออกกลางคันหรือการทำให้แบตช์เป็นมาตรฐาน

ทีม TensorFlow Hub ขอแนะนำให้ใช้อินเทอร์เฟซ SavedModel ที่นำกลับมาใช้ใหม่ได้ใน SavedModels ทั้งหมดที่มีขึ้นเพื่อนำกลับมาใช้ใหม่ตามความหมายข้างต้น ยูทิลิตีจำนวนมากจากไลบรารี tensorflow_hub โดยเฉพาะ hub.KerasLayer ต้องการ SavedModels เพื่อนำไปใช้

ความสัมพันธ์กับ SignatureDefs

อินเทอร์เฟซนี้ในแง่ของ tf.functions และคุณลักษณะ TF2 อื่น ๆ นั้นแยกจากลายเซ็นของ SavedModel ซึ่งมีให้ใช้งานตั้งแต่ TF1 และยังคงใช้ใน TF2 สำหรับการอนุมาน (เช่น การปรับใช้ SavedModels กับ TF Serving หรือ TF Lite) ลายเซ็นสำหรับการอนุมานไม่ได้แสดงออกมากพอที่จะสนับสนุนการปรับแต่งอย่างละเอียด และ tf.function ให้ Python API ที่เป็นธรรมชาติและแสดงออกมากขึ้นสำหรับโมเดลที่นำกลับมาใช้ใหม่

ความสัมพันธ์กับห้องสมุดสร้างแบบจำลอง

SavedModel ที่นำกลับมาใช้ใหม่ได้ใช้เฉพาะ TensorFlow 2 primitives เท่านั้น โดยไม่ขึ้นกับไลบรารีการสร้างแบบจำลองใดๆ เช่น Keras หรือ Sonnet สิ่งนี้อำนวยความสะดวกในการใช้ซ้ำในไลบรารีการสร้างแบบจำลอง โดยปราศจากการพึ่งพารหัสการสร้างแบบจำลองดั้งเดิม

จำเป็นต้องมีการดัดแปลงจำนวนหนึ่งโหลด SavedModels ที่นำกลับมาใช้ใหม่ได้ลงในหรือบันทึกจากไลบรารีการสร้างแบบจำลองที่กำหนด สำหรับ Keras นั้น hub.KerasLayer ให้การโหลด และการบันทึกในตัวของ Keras ในรูปแบบ SavedModel ได้รับการออกแบบใหม่สำหรับ TF2 โดยมีเป้าหมายในการจัดหา superset ของอินเทอร์เฟซนี้ (ดู RFC ตั้งแต่เดือนพฤษภาคม 2019)

ความสัมพันธ์กับงานเฉพาะ "Common SavedModel APIs"

คำจำกัดความของอินเทอร์เฟซในหน้านี้อนุญาตให้ใช้อินพุตและเอาต์พุตจำนวนและประเภทใดก็ได้ Common SavedModel APIs สำหรับ TF Hub ปรับแต่งอินเทอร์เฟซทั่วไปนี้ด้วยข้อตกลงการใช้งานสำหรับงานเฉพาะ เพื่อทำให้โมเดลสามารถสับเปลี่ยนได้อย่างง่ายดาย

คำจำกัดความของอินเทอร์เฟซ

คุณลักษณะ

SavedModel ที่นำกลับมาใช้ใหม่ได้คือ TensorFlow 2 SavedModel ที่ obj = tf.saved_model.load(...) ส่งคืนอ็อบเจ็กต์ที่มีแอตทริบิวต์ต่อไปนี้

  • __call__ . ที่จำเป็น. tf.function ที่ใช้การคำนวณของโมเดล ("forward pass") ขึ้นอยู่กับข้อกำหนดด้านล่าง

  • variables : รายการของอ็อบเจ็กต์ tf.Variable ซึ่งแสดงรายการตัวแปรทั้งหมดที่ใช้โดยการเรียก __call__ ที่เป็นไปได้ รวมถึงตัวแปรที่ฝึกได้และไม่สามารถฝึกได้

    รายการนี้สามารถละเว้นได้ถ้าว่างเปล่า

  • trainable_variables : รายการของอ็อบเจ็กต์ tf.Variable ที่ v.trainable เป็นจริงสำหรับองค์ประกอบทั้งหมด ตัวแปรเหล่านี้ต้องเป็นสับเซตของ variables สิ่งเหล่านี้คือตัวแปรที่ต้องฝึกฝนเมื่อทำการปรับแต่งวัตถุ ผู้สร้าง SavedModel อาจเลือกที่จะละเว้นตัวแปรบางตัวที่นี่ซึ่งเดิมสามารถฝึกได้เพื่อระบุว่าไม่ควรแก้ไขตัวแปรเหล่านี้ในระหว่างการปรับละเอียด

    รายการนี้สามารถละเว้นได้ถ้าว่าง โดยเฉพาะอย่างยิ่ง ถ้า SavedModel ไม่สนับสนุนการปรับแต่ง

  • regularization_losses : รายการของ tf.functions ซึ่งแต่ละอันรับอินพุตเป็นศูนย์และส่งคืนเทนเซอร์สเกลาร์โฟลตตัวเดียว สำหรับการปรับละเอียด ผู้ใช้ SavedModel ขอแนะนำให้รวมเงื่อนไขเหล่านี้เป็นเงื่อนไขการทำให้เป็นมาตรฐานเพิ่มเติมในการสูญเสีย (ในกรณีที่ง่ายที่สุดโดยไม่ต้องปรับขนาดเพิ่มเติม) โดยทั่วไปแล้ว สิ่งเหล่านี้จะใช้เพื่อแสดงตัวกำหนดน้ำหนัก (หากไม่มีอินพุต ฟังก์ชัน tf.function เหล่านี้ไม่สามารถแสดงตัวปรับกิจกรรมให้เป็นปกติได้)

    รายการนี้สามารถละเว้นได้ถ้าว่าง โดยเฉพาะอย่างยิ่ง ถ้า SavedModel ไม่สนับสนุนการปรับละเอียดหรือไม่ต้องการกำหนดน้ำหนักให้เป็นมาตรฐาน

ฟังก์ชัน __call__

obj ที่บันทึกไว้ในโมเดลที่กู้คืนมีแอตทริบิวต์ obj obj.__call__ ที่เป็น tf.function ที่กู้คืนและอนุญาตให้เรียก obj ดังต่อไปนี้

เรื่องย่อ (รหัสหลอก):

outputs = obj(inputs, trainable=..., **kwargs)

ข้อโต้แย้ง

อาร์กิวเมนต์มีดังนี้

  • มีอาร์กิวเมนต์หนึ่งตำแหน่งที่ต้องการพร้อมชุดการเปิดใช้งานอินพุตของ SavedModel ประเภทของมันคือหนึ่งใน

    • เทนเซอร์ตัวเดียวสำหรับอินพุตเดียว
    • รายการเทนเซอร์สำหรับลำดับอินพุตที่ไม่มีชื่อ
    • คำสั่งของเทนเซอร์ที่ใส่ชุดของชื่ออินพุตเฉพาะ

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

  • อาจมีการ training อาร์กิวเมนต์คีย์เวิร์ดที่เป็นทางเลือกที่ยอมรับ Python boolean, True หรือ False ค่าเริ่มต้นคือ False หากโมเดลสนับสนุนการปรับละเอียด และหากการคำนวณแตกต่างกันระหว่างทั้งสอง (เช่น ในการออกกลางคันและการปรับให้เป็นมาตรฐานแบบกลุ่ม) ความแตกต่างนั้นจะถูกนำไปใช้กับอาร์กิวเมนต์นี้ มิฉะนั้น อาร์กิวเมนต์นี้อาจขาดหายไป

    ไม่จำเป็นที่ __call__ ยอมรับอาร์กิวเมนต์ training ที่มีค่าเทนเซอร์ มันขึ้นอยู่กับผู้โทรที่จะใช้ tf.cond() หากจำเป็นต้องส่งระหว่างกัน

  • ผู้สร้าง SavedModel อาจเลือกที่จะยอมรับ kwargs เพิ่มเติมของชื่อเฉพาะ

    • สำหรับอาร์กิวเมนต์ที่มีค่าเทนเซอร์ ผู้สร้าง SavedModel กำหนด dtypes และรูปร่างที่อนุญาต tf.function ยอมรับค่าเริ่มต้นของ Python บนอาร์กิวเมนต์ที่ติดตามด้วยอินพุต tf.TensorSpec อาร์กิวเมนต์ดังกล่าวสามารถใช้เพื่อปรับแต่งไฮเปอร์พารามิเตอร์ที่เป็นตัวเลขที่เกี่ยวข้องกับ __call__ (เช่น อัตราการออกกลางคัน)

    • สำหรับอาร์กิวเมนต์ที่มีค่า Python ผู้สร้าง SavedModel จะกำหนดค่าที่อนุญาต อาร์กิวเมนต์ดังกล่าวสามารถใช้เป็นแฟล็กเพื่อสร้างตัวเลือกที่ไม่ต่อเนื่องในฟังก์ชันที่ติดตาม

ฟังก์ชัน __call__ ที่กู้คืนต้องจัดเตรียมการติดตามสำหรับอาร์กิวเมนต์ที่อนุญาตทั้งหมดรวมกัน การพลิก training ระหว่าง True และ False ต้องไม่เปลี่ยนการอนุญาตของอาร์กิวเมนต์

ผลลัพธ์

outputs จากการเรียก obj สามารถเป็น

  • เทนเซอร์ตัวเดียวสำหรับเอาต์พุตเดี่ยว
  • รายการเทนเซอร์สำหรับลำดับเอาต์พุตที่ไม่มีชื่อ
  • dict ของ Tensors ที่คีย์โดยชุดของชื่อเอาต์พุตเฉพาะ

(การแก้ไขในอนาคตของอินเทอร์เฟซนี้อาจอนุญาตให้มีการซ้อนทั่วไปมากขึ้น) ประเภทการส่งคืนอาจแตกต่างกันไปขึ้นอยู่กับ kwargs ที่มีค่า Python ซึ่งช่วยให้แฟล็กสร้างเอาต์พุตพิเศษได้ ผู้สร้าง SavedModel กำหนด dtypes และรูปร่างของเอาต์พุตและการพึ่งพาอินพุต

ชื่อเรียกได้

SavedModel ที่นำกลับมาใช้ใหม่ได้สามารถจัดเตรียมชิ้นส่วนของแบบจำลองได้หลายแบบตามที่อธิบายไว้ข้างต้นโดยใส่ไว้ในอ็อบเจกต์ย่อยที่มีชื่อ เช่น obj.foo , obj.bar และอื่นๆ แต่ละอ็อบเจ็กต์ย่อยจัดเตรียมเมธอด __call__ และคุณลักษณะที่สนับสนุนเกี่ยวกับตัวแปร ฯลฯ เฉพาะสำหรับชิ้นส่วนของโมเดลนั้น สำหรับตัวอย่างข้างต้น จะมี obj.foo.__call__ , obj.foo.variables และอื่นๆ

โปรดทราบว่าอินเทอร์เฟซนี้ ไม่ ครอบคลุมวิธีการเพิ่ม tf.function เปล่าโดยตรงเป็น tf.foo

ผู้ใช้ SavedModels ที่นำกลับมาใช้ใหม่ได้รับการคาดหวังให้จัดการการซ้อนระดับเดียวเท่านั้น ( obj.bar แต่ไม่ใช่ obj.bar.baz ) (การแก้ไขในอนาคตของอินเทอร์เฟซนี้อาจอนุญาตให้ซ้อนลึกได้ และอาจยกเว้นข้อกำหนดที่อ็อบเจ็กต์ระดับบนสุดสามารถเรียกได้เอง)

คำกล่าวปิดงาน

ความสัมพันธ์กับ API ในกระบวนการ

เอกสารนี้อธิบายส่วนต่อประสานของคลาส Python ซึ่งประกอบด้วย primitives เช่น tf.function และ tf.Variable ที่คงอยู่แบบไปกลับผ่านการทำให้เป็นอนุกรมผ่าน tf.saved_model.save() และ tf.saved_model.load() อย่างไรก็ตาม อินเทอร์เฟซมีอยู่แล้วบนวัตถุดั้งเดิมที่ส่งผ่านไปยัง tf.saved_model.save() การปรับให้เข้ากับอินเทอร์เฟซนั้นทำให้สามารถแลกเปลี่ยนชิ้นส่วนแบบจำลองระหว่าง API การสร้างแบบจำลองภายในโปรแกรม TensorFlow เดียว