تدفق التوتر:: نِطَاق

#include <scope.h>

يمثل كائن Scope مجموعة من عمليات TensorFlow ذات الصلة التي لها نفس الخصائص، مثل بادئة الاسم الشائع.

ملخص

كائن النطاق عبارة عن حاوية لخصائص TensorFlow 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()) { ... }

التسلسل الهرمي للنطاق :

توفر فئة النطاق العديد من وظائف 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 . يؤدي هذا إلى إنشاء بعض الموارد المشتركة بين كافة النطاقات التابعة التي ترث من هذا النطاق، بشكل مباشر أو انتقالي. على سبيل المثال، يقوم نطاق جديد بإنشاء كائن رسم بياني جديد تتم إضافة العمليات إليه عند استخدام النطاق الجديد أو أبنائه بواسطة مُنشئ العمليات. يحتوي النطاق الجديد أيضًا على كائن الحالة والذي سيتم استخدامه للإشارة إلى الأخطاء بواسطة وظائف Op-constructor التي يتم استدعاؤها في أي نطاق فرعي. يجب أن تتحقق وظائف Op-constructor من حالة النطاق عن طريق استدعاء الأسلوب ok() قبل متابعة إنشاء المرجع.

سلامة الموضوع:

كائن 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
إذا كانت الحالة () هي الحالة::OK()، فقم بتحويل كائن الرسم البياني المخزن في هذا النطاق إلى نموذج GraphDef وإرجاع الحالة::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 ()
إرجاع نطاق جديد.

الوظائف العامة

ClearColocation

Scope ClearColocation() const 

قم بإلغاء تحديد جميع قيود الموقع المشترك.

ColocateWith

Scope ColocateWith(
  const Operation & op
) const 

إرجاع نطاق جديد.

سيتم وضع جميع العمليات التي تم إنشاؤها ضمن النطاق الذي تم إرجاعه في موقع مشترك على الجهاز الذي تم وضع العملية فيه. ملاحظة: تهدف هذه الوظيفة إلى استخدام المكتبات الداخلية فقط للتحكم في وضع العمليات على الأجهزة. لا يتم تشجيع الاستخدام العام لأن تنفيذ وضع الجهاز عرضة للتغيير.

ColocateWith

Scope ColocateWith(
  const Output & out
) const 

وظيفة الراحة لما سبق.

ExitOnError

Scope ExitOnError() const 

إرجاع نطاق جديد.

تأخذ وظائف المنشئ العملياتي النطاق الذي تم إرجاعه كوسيطة النطاق وستخرج بمجرد اكتشاف خطأ، بدلاً من تعيين الحالة على النطاق.

GetCompositeOpScopes

CompositeOpScopes GetCompositeOpScopes(
  const string & composite_op_name
) const 

GetUniqueNameForOp

string GetUniqueNameForOp(
  const string & default_name
) const 

قم بإرجاع اسم فريد باستخدام default_name إذا لم يتم تحديد اسم العملية.

NewSubScope

Scope NewSubScope(
  const string & child_scope_name
) const 

إرجاع نطاق جديد.

العمليات التي تم إنشاؤها باستخدام هذا النطاق سيكون لها name/child_scope_name كبادئة. سيكون الاسم الفعلي فريدًا في النطاق الحالي. كافة الخصائص الأخرى موروثة من النطاق الحالي. إذا كان child_scope_name فارغًا، فسيتم حذف / .

نِطَاق

 Scope(
  const Scope & other
)

ToGraphDef

Status ToGraphDef(
  GraphDef *gdef
) const 

إذا كانت الحالة () هي الحالة::OK()، فقم بتحويل كائن الرسم البياني المخزن في هذا النطاق إلى نموذج GraphDef وإرجاع الحالة::OK().

بخلاف ذلك، قم بإرجاع حالة الخطأ كما هي دون إجراء تحويل GraphDef.

UpdateStatus

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 

إرجاع نطاق جديد.

سيتم تعيين حقل الجهاز على "الجهاز" لجميع العمليات التي تم إنشاؤها ضمن النطاق الذي تم إرجاعه.

مع KernelLabel

Scope WithKernelLabel(
  const string & kernel_label
) const 

إرجاع نطاق جديد.

جميع العمليات التي تم إنشاؤها باستخدام النطاق الجديد سيكون لها kernel_label كقيمة للسمة '_kernel' الخاصة بها؛

مع عدم التحكم في التبعيات

Scope WithNoControlDependencies() const 

إرجاع نطاق جديد.

جميع العمليات التي تم إنشاؤها ضمن النطاق الذي تم إرجاعه لن يكون لها أي تبعيات تحكم على العمليات الأخرى.

معOpName

Scope WithOpName(
  Ty... fragments
) const 

إرجاع نطاق جديد.

جميع العمليات التي تم إنشاؤها ضمن النطاق الذي تم إرجاعه سيكون لها أسماء بالنموذج name/StrCat(fragments...)[_suffix]

WithXlaCluster

Scope WithXlaCluster(
  const string & xla_cluster
) const 

إرجاع نطاق جديد.

جميع العمليات التي تم إنشاؤها ضمن النطاق الذي تم إرجاعه سيتم تعيين سمة _XlaCluster الخاصة بها على xla_cluster .

control_deps

const std::vector< Operation > & control_deps() const 

رسم بياني

Graph * graph() const 

graph_as_shared_ptr

std::shared_ptr< Graph > graph_as_shared_ptr() const 

نعم

bool ok() const 

المشغل=

Scope & operator=(
  const Scope & other
)

حالة

Status status() const 

~النطاق

 ~Scope()

وظائف ثابتة العامة

NewRootScope

Scope NewRootScope()

إرجاع نطاق جديد.

يؤدي هذا إلى إنشاء رسم بياني جديد ويجب أن تستخدم كافة العمليات التي تم إنشاؤها في هذا الرسم البياني الكائن الذي تم إرجاعه باعتباره النطاق "الجذر".