تنسورفلو:: محدوده

#include <scope.h>

یک شیء Scope مجموعه‌ای از عملیات مرتبط TensorFlow را نشان می‌دهد که دارای ویژگی‌های یکسانی مانند پیشوند نام مشترک هستند.

خلاصه

یک شیء Scope ظرفی برای ویژگی‌های Op در TensorFlow است. سازنده‌های 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<> را ارائه می‌دهد که یک scope جدید ایجاد می‌کنند. scope جدید معمولاً یک ویژگی را تغییر می‌دهد در حالی که سایر ویژگی‌ها از scope والد به ارث می‌رسند. متد NewSubScope(name) name به پیشوند نام‌های ops ایجاد شده در scope اضافه می‌کند و WithOpName() پسوند را تغییر می‌دهد که در غیر این صورت به طور پیش‌فرض به نوع op بستگی دارد.

مثال‌های نام‌گذاری:

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 باید قبل از ادامه ساخت op، وضعیت محدوده را با فراخوانی متد ok() بررسی کنند.

ایمنی نخ:

یک شیء Scope از نظر thread-safe نیست. threadها نمی‌توانند همزمان توابع 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
اگر status() برابر با Status::OK() باشد، شیء Graph ذخیره شده در این scope را به یک نمونه 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
Status

توابع استاتیک عمومی

NewRootScope ()
یک محدوده جدید را برگردانید.

کارکردهای عمومی

ClearColocation

Scope ClearColocation() const 

تمام محدودیت‌های مربوط به فضای اشتراک‌گذاری را پاک کنید.

کولوکیت با

Scope ColocateWith(
  const Operation & op
) const 

یک محدوده جدید را برگردانید.

تمام عملیات‌های ایجاد شده در محدوده‌ی برگردانده شده، در دستگاهی که عملیات در آن قرار دارد، قرار خواهند گرفت. توجه: این تابع فقط برای استفاده از کتابخانه‌های داخلی جهت کنترل قرارگیری عملیات‌ها در دستگاه‌ها در نظر گرفته شده است. استفاده‌ی عمومی توصیه نمی‌شود زیرا پیاده‌سازی قرارگیری دستگاه ممکن است تغییر کند.

کولوکیت با

Scope ColocateWith(
  const Output & out
) const 

عملکرد راحتی برای موارد فوق.

خطای خروج

Scope ExitOnError() const 

یک محدوده جدید را برگردانید.

توابع سازنده‌ی عملیاتی که دامنه‌ی بازگشتی را به عنوان آرگومان دامنه دریافت می‌کنند، به محض شناسایی خطا، به جای تنظیم وضعیت در دامنه، از آن خارج می‌شوند.

GetCompositeOpScops

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 ذخیره شده در این scope را به یک نمونه GraphDef تبدیل کرده و Status::OK() را برمی‌گرداند.

در غیر این صورت، وضعیت خطا را بدون انجام تبدیل GraphDef، به همان صورت که هست، برگردانید.

وضعیت به‌روزرسانی

void UpdateStatus(
  const Status & s
) const 

وضعیت این محدوده را به‌روزرسانی کنید.

نکته: شیء status بین همه فرزندان این scope مشترک است. اگر status حاصل Status::OK() نباشد و exit_on_error_ روی این scope تنظیم شده باشد، این تابع با فراخوانی 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] خواهند داشت.

با XlaCluster

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

توابع استاتیک عمومی

نیوروت‌اسکوپ

Scope NewRootScope()

یک محدوده جدید را برگردانید.

این یک گراف جدید ایجاد می‌کند و تمام عملیات ساخته شده در این گراف باید از شیء برگشتی به عنوان دامنه "ریشه" استفاده کنند.