tensorflow::ขอบเขต
#include <scope.h> อ็อบเจ็กต์ Scope แทนชุดของโอเปอเรชัน TensorFlow ที่เกี่ยวข้องซึ่งมีคุณสมบัติเหมือนกัน เช่น คำนำหน้าชื่อที่เหมือนกัน
สรุป
อ็อบเจ็กต์ Scope เป็นคอนเทนเนอร์สำหรับคุณสมบัติของ TensorFlow Op ตัวสร้าง Op จะได้รับอ็อบเจ็กต์ Scope เป็นอาร์กิวเมนต์แรกที่จำเป็น และ Op ที่สร้างขึ้นจะได้รับคุณสมบัติจากอ็อบเจ็กต์นั้น
ตัวอย่างง่ายๆ:
using namespace ops; Scope root = Scope::NewRootScope(); auto c1 = Const(root, { {1, 1} }); auto m = MatMul(root, c1, { {41}, {1} }); GraphDef gdef; Status s = root.ToGraphDef(&gdef); if (!s.ok()) { ... }
ลำดับชั้น ของ ขอบเขต:
คลาส Scope มีฟังก์ชัน With<> ต่างๆ ที่ใช้สร้างขอบเขตใหม่ โดยทั่วไปขอบเขตใหม่จะมีคุณสมบัติที่เปลี่ยนแปลงไปหนึ่งอย่าง ในขณะที่คุณสมบัติอื่นๆ จะได้รับการสืบทอดมาจากขอบเขตหลัก เมธอด NewSubScope(name) จะเพิ่ม name ต่อท้ายชื่อสำหรับโอเปอเรเตอร์ที่สร้างขึ้นภายในขอบเขต และ WithOpName() จะเปลี่ยนคำต่อท้าย ซึ่งโดยปกติจะใช้ค่าเริ่มต้นเป็นประเภทของโอเปอเรเตอร์นั้นๆ
ตัวอย่างชื่อ:
Scope root = Scope::NewRootScope(); Scope linear = root.NewSubScope("linear"); // W will be named "linear/W" auto W = Variable(linear.WithOpName("W"), {2, 2}, DT_FLOAT); // b will be named "linear/b_3" int idx = 3; auto b = Variable(linear.WithOpName("b_", idx), {2}, DT_FLOAT); auto x = Const(linear, {...}); // name: "linear/Const" auto m = MatMul(linear, x, W); // name: "linear/MatMul" auto r = BiasAdd(linear, m, b); // name: "linear/BiasAdd"
อายุการใช้ งานของขอบเขต :
การสร้างขอบเขตใหม่ทำได้โดยการเรียก Scope::NewRootScope ซึ่งจะสร้างทรัพยากรบางอย่างที่ใช้ร่วมกันโดยขอบเขตย่อยทั้งหมดที่สืบทอดมาจากขอบเขตนี้ ไม่ว่าโดยตรงหรือโดยอ้อม ตัวอย่างเช่น ขอบเขตใหม่จะสร้างอ็อบเจ็กต์ Graph ใหม่ ซึ่งจะมีการเพิ่มการดำเนินการเข้าไปเมื่อขอบเขตใหม่หรือขอบเขตย่อยถูกใช้งานโดยตัวสร้าง Op ขอบเขตใหม่ยังมีอ็อบเจ็กต์ Status ซึ่งจะใช้เพื่อระบุข้อผิดพลาดโดยฟังก์ชันตัวสร้าง Op ที่เรียกใช้ในขอบเขตย่อยใดๆ ฟังก์ชันตัวสร้าง Op ต้องตรวจสอบสถานะของขอบเขตโดยการเรียกเมธอด ok() ก่อนที่จะดำเนินการสร้าง Op ต่อไป
ความปลอดภัยของเกลียว:
อ็อบเจ็กต์ Scope ไม่ปลอดภัยต่อการใช้งานแบบมัลติเธรด เธรดไม่สามารถเรียกฟังก์ชันตัวสร้างการทำงานพร้อมกันบนอ็อบเจ็กต์ Scope เดียวกันได้
ตัวสร้างและตัวทำลาย | |
|---|---|
Scope (const Scope & other) | |
~Scope () |
หน้าที่สาธารณะ | |
|---|---|
ClearColocation () const | ล้างข้อจำกัดการจัดวางร่วมทั้งหมด |
ColocateWith (const Operation & op) const | ส่งคืนขอบเขตใหม่ |
ColocateWith (const Output & out) const | ฟังก์ชันอำนวยความสะดวกสำหรับสิ่งที่กล่าวมาข้างต้น |
ExitOnError () const | ส่งคืนขอบเขตใหม่ |
GetCompositeOpScopes (const string & composite_op_name) const | |
GetUniqueNameForOp (const string & default_name) const | string ส่งคืนชื่อที่ไม่ซ้ำกัน โดยใช้ default_name หากไม่ได้ระบุชื่อตัวดำเนินการ |
NewSubScope (const string & child_scope_name) const | ส่งคืนขอบเขตใหม่ |
ToGraphDef (GraphDef *gdef) const | ถ้า status() คือ Status::OK() ให้แปลงอ็อบเจ็กต์ Graph ที่จัดเก็บอยู่ในขอบเขตนี้เป็น GraphDef proto แล้วส่งคืน Status::OK() |
UpdateStatus (const Status & s) const | void อัปเดตสถานะของขอบเขตนี้ |
WithAssignedDevice (const string & assigned_device) const | ส่งคืนขอบเขตใหม่ |
WithControlDependencies (const gtl::ArraySlice< Operation > & control_deps) const | ส่งคืนขอบเขตใหม่ |
WithControlDependencies (const Output & control_dep) const | เช่นเดียวกับข้างต้น แต่สะดวกกว่าหากเพิ่มการพึ่งพาการควบคุมลงในการดำเนินการที่สร้างเอาต์พุต control_dep |
WithDevice (const string & device) const | ส่งคืนขอบเขตใหม่ |
WithKernelLabel (const string & kernel_label) const | ส่งคืนขอบเขตใหม่ |
WithNoControlDependencies () const | ส่งคืนขอบเขตใหม่ |
WithOpName (Ty... fragments) const | ส่งคืนขอบเขตใหม่ |
WithXlaCluster (const string & xla_cluster) const | ส่งคืนขอบเขตใหม่ |
control_deps () const | const std::vector< Operation > & |
graph () const | Graph * |
graph_as_shared_ptr () const | std::shared_ptr< Graph > |
ok () const | bool |
operator= (const Scope & other) | Scope & |
status () const | |
ฟังก์ชันคงที่สาธารณะ | |
|---|---|
NewRootScope () | ส่งคืนขอบเขตใหม่ |
หน้าที่สาธารณะ
โคโลเคทกับ
Scope ColocateWith( const Operation & op ) const
ส่งคืนขอบเขตใหม่
โอเปอเรชันทั้งหมดที่สร้างขึ้นภายในขอบเขตที่ส่งคืนจะถูกจัดวางร่วมกันบนอุปกรณ์ที่วางโอเปอเรชันนั้นไว้ หมายเหตุ: ฟังก์ชันนี้มีไว้สำหรับใช้ภายในไลบรารีเท่านั้น เพื่อควบคุมการจัดวางโอเปอเรชันบนอุปกรณ์ ไม่แนะนำให้ใช้งานสาธารณะ เนื่องจากวิธีการจัดวางบนอุปกรณ์อาจมีการเปลี่ยนแปลงได้
โคโลเคทกับ
Scope ColocateWith( const Output & out ) const
ฟังก์ชันอำนวยความสะดวกสำหรับสิ่งที่กล่าวมาข้างต้น
ออกเมื่อเกิดข้อผิดพลาด
Scope ExitOnError() const
ส่งคืนขอบเขตใหม่
ฟังก์ชัน op-constructor ที่รับขอบเขตที่ส่งคืนเป็นอาร์กิวเมนต์ขอบเขต จะออกจากโปรแกรมทันทีที่ตรวจพบข้อผิดพลาด แทนที่จะตั้งค่าสถานะให้กับขอบเขตนั้น
รับขอบเขตการทำงานแบบคอมโพสิต
CompositeOpScopes GetCompositeOpScopes( const string & composite_op_name ) const
GetUniqueNameForOp
string GetUniqueNameForOp( const string & default_name ) const
ส่งคืนชื่อที่ไม่ซ้ำกัน โดยใช้ default_name หากไม่ได้ระบุชื่อตัวดำเนินการ
ขอบเขตย่อยใหม่
Scope NewSubScope( const string & child_scope_name ) const
ส่งคืนขอบเขตใหม่
โอเปอเรชันที่สร้างขึ้นด้วยขอบเขตนี้จะมี name/child_scope_name เป็นคำนำหน้า ชื่อจริงจะไม่ซ้ำกันในขอบเขตปัจจุบัน คุณสมบัติอื่นๆ ทั้งหมดจะถูกสืบทอดมาจากขอบเขตปัจจุบัน หาก child_scope_name ว่างเปล่า เครื่องหมาย / จะถูกละเว้น
ขอบเขต
Scope( const Scope & other )
โทกราฟดีเฟซ
Status ToGraphDef( GraphDef *gdef ) const
ถ้า status() คือ Status::OK() ให้แปลงอ็อบเจ็กต์ Graph ที่จัดเก็บอยู่ในขอบเขตนี้เป็น GraphDef proto แล้วส่งคืน Status::OK()
มิเช่นนั้น ให้ส่งคืนสถานะข้อผิดพลาดตามเดิมโดยไม่ต้องทำการแปลง GraphDef
สถานะการอัปเดต
void UpdateStatus( const Status & s ) const
อัปเดตสถานะของขอบเขตนี้
หมายเหตุ: อ็อบเจ็กต์สถานะจะถูกใช้ร่วมกันระหว่างลูกๆ ทั้งหมดในขอบเขตนี้ หากสถานะที่ได้ไม่ใช่ Status::OK() และมีการตั้งค่า exit_on_error_ ในขอบเขตนี้ ฟังก์ชันนี้จะออกจากระบบโดยการเรียก LOG(FATAL)
ด้วยอุปกรณ์ที่กำหนด
Scope WithAssignedDevice( const string & assigned_device ) const
ส่งคืนขอบเขตใหม่
การดำเนินการทั้งหมดที่สร้างขึ้นภายในขอบเขตที่ส่งคืนจะมีอุปกรณ์ที่กำหนดให้ตั้งค่าเป็น assigned_device
ด้วยการควบคุมการพึ่งพา
Scope WithControlDependencies( const gtl::ArraySlice< Operation > & control_deps ) const
ส่งคืนขอบเขตใหม่
โอเปอเรชันทั้งหมดที่สร้างขึ้นภายในขอบเขตที่ส่งคืนจะมีส่วนพึ่งพาการควบคุมเป็นผลรวมของโอเปอเรชันในเวกเตอร์ control_deps และส่วนพึ่งพาการควบคุมของขอบเขตปัจจุบัน
ด้วยการควบคุมการพึ่งพา
Scope WithControlDependencies( const Output & control_dep ) const
เช่นเดียวกับข้างต้น แต่สะดวกกว่าหากเพิ่มการพึ่งพาการควบคุมลงในการดำเนินการที่สร้างเอาต์พุต control_dep
ด้วยอุปกรณ์
Scope WithDevice( const string & device ) const
ส่งคืนขอบเขตใหม่
การดำเนินการทั้งหมดที่สร้างขึ้นภายในขอบเขตที่ส่งคืนจะมีฟิลด์อุปกรณ์ตั้งค่าเป็น 'อุปกรณ์'
ด้วยเคอร์เนลเลเบล
Scope WithKernelLabel( const string & kernel_label ) const
ส่งคืนขอบเขตใหม่
โอเปอเรชันทั้งหมดที่สร้างขึ้นด้วยขอบเขตใหม่จะมีค่าเป็น kernel_label สำหรับแอตทริบิวต์ '_kernel'
โดยไม่มีการควบคุมการพึ่งพา
Scope WithNoControlDependencies() const
ส่งคืนขอบเขตใหม่
การดำเนินการทั้งหมดที่สร้างขึ้นภายในขอบเขตที่ส่งคืนจะไม่มีการพึ่งพาการควบคุมใดๆ กับการดำเนินการอื่นๆ
ด้วยชื่อผู้ปฏิบัติงาน
Scope WithOpName( Ty... fragments ) const
ส่งคืนขอบเขตใหม่
โอเปอเรเตอร์ทั้งหมดที่สร้างขึ้นภายในขอบเขตที่ส่งคืนจะมีชื่อในรูปแบบ name/StrCat(fragments...)[_suffix]
ด้วยคลัสเตอร์ Xla
Scope WithXlaCluster( const string & xla_cluster ) const
ส่งคืนขอบเขตใหม่
โอเปอเรชันทั้งหมดที่สร้างขึ้นภายในขอบเขตที่ส่งคืนจะมีแอตทริบิวต์ _XlaCluster ตั้งค่าเป็น xla_cluster
การควบคุมการพึ่งพา
const std::vector< Operation > & control_deps() const
กราฟ
Graph * graph() const
กราฟเป็นพอยต์ที่ใช้ร่วมกัน
std::shared_ptr< Graph > graph_as_shared_ptr() const
ตกลง
bool ok() const
สถานะ
Status status() const
~ขอบเขต
~Scope()
ฟังก์ชันคงที่สาธารณะ
NewRootScope
Scope NewRootScope()
ส่งคืนขอบเขตใหม่
วิธีนี้จะสร้างกราฟใหม่ และการดำเนินการทั้งหมดที่สร้างขึ้นในกราฟนี้ควรใช้วัตถุที่ส่งคืนมาเป็นขอบเขต "ราก"