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<> 関数を提供します。新しいスコープでは通常、1 つのプロパティが変更され、他のプロパティは親スコープから継承されます。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オブジェクトはスレッドセーフではありません。複数のスレッドが同時に同じ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 オブジェクトを 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 

新しいスコープを返します。

返されたスコープをスコープ引数として受け取るオペレーションコンストラクタ関数は、スコープのステータスを設定する代わりに、エラーが検出されるとすぐに終了します。

GetCompositeOpScopes

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
)

ToGraphDef

Status ToGraphDef(
  GraphDef *gdef
) const 

status() が 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に設定されます。

WithControlDependencies

Scope WithControlDependencies(
  const gtl::ArraySlice< Operation > & control_deps
) const 

新しいスコープを返します。

返されたスコープ内で作成されるすべての操作は、control_deps ベクトル内の操作の和集合と現在のスコープの制御依存関係を制御依存関係として持ちます。

WithControlDependencies

Scope WithControlDependencies(
  const Output & control_dep
) const 

上記と同様だが、control_dep 出力を生成する操作に制御依存関係を追加すると便利である。

デバイスと共に

Scope WithDevice(
  const string & device
) const 

新しいスコープを返します。

返されたスコープ内で作成されるすべての操作では、デバイスフィールドが「device」に設定されます。

カーネルラベル付き

Scope WithKernelLabel(
  const string & kernel_label
) const 

新しいスコープを返します。

新しいスコープで作成されたすべての操作は、'_kernel'属性の値としてkernel_labelを持つことになります。

制御依存関係なし

Scope WithNoControlDependencies() const 

新しいスコープを返します。

返されたスコープ内で作成されるすべての操作は、他の操作に対する制御依存関係を持ちません。

WithOpName

Scope WithOpName(
  Ty... fragments
) const 

新しいスコープを返します。

返されたスコープ内で作成されるすべての操作にはname/StrCat(fragments...)[_suffix]の形式の名前が付けられます。

WithXlaCluster

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

パブリック静的関数

NewRootScope

Scope NewRootScope()

新しいスコープを返します。

これにより新しいグラフが作成され、このグラフ内で構築されるすべての操作は、返されたオブジェクトを「ルート」スコープとして使用する必要があります。