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)
status () const

ฟังก์ชันคงที่สาธารณะ

NewRootScope ()
ส่งคืนขอบเขตใหม่

หน้าที่สาธารณะ

เคลียร์โคโลเคชั่น

Scope ClearColocation() const 

ล้างข้อจำกัดการจัดวางร่วมทั้งหมด

โคโลเคทกับ

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 

ตัวดำเนินการ =

Scope & operator=(
  const Scope & other
)

สถานะ

Status status() const 

~ขอบเขต

 ~Scope()

ฟังก์ชันคงที่สาธารณะ

NewRootScope

Scope NewRootScope()

ส่งคืนขอบเขตใหม่

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