tensorflow:: Scope

#include <scope.h>

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

ملخص

كائن النطاق هو حاوية لخصائص عملية TensorFlow. تتلقى دوال إنشاء العمليات كائن نطاق كمعامل أول إلزامي، وتكتسب العملية المُنشأة الخصائص الموجودة في هذا الكائن.

مثال بسيط:

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()` قبل المتابعة في إنشاء العملية.

أمان الخيوط:

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

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

ClearColocation

Scope ClearColocation() const 

قم بإزالة جميع قيود التواجد المشترك.

موقع مشترك مع

Scope ColocateWith(
  const Operation & op
) const 

أعد نطاقًا جديدًا.

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

موقع مشترك مع

Scope ColocateWith(
  const Output & out
) const 

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

الخروج عند الخطأ

Scope ExitOnError() const 

أعد نطاقًا جديدًا.

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

الحصول على نطاقات التشغيل المركبة

CompositeOpScopes GetCompositeOpScopes(
  const string & composite_op_name
) const 

الحصول على اسم فريد للعملية

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
)

ToGraphDef

Status ToGraphDef(
  GraphDef *gdef
) const 

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

أعد نطاقًا جديدًا.

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

WithKernelLabel

Scope WithKernelLabel(
  const string & kernel_label
) const 

أعد نطاقًا جديدًا.

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

بدون تبعيات تحكم

Scope WithNoControlDependencies() const 

أعد نطاقًا جديدًا.

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

WithOpName

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 

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

الدوال الثابتة العامة

نيو روت سكوب

Scope NewRootScope()

أعد نطاقًا جديدًا.

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