テンソルフロー::範囲

#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を呼び出すことによって作成されます。これにより、このスコープを直接または推移的に継承するすべての子スコープで共有されるリソースが作成されます。たとえば、新しいスコープは、新しいスコープまたはその子が Op コンストラクターによって使用されるときに操作が追加される新しい Graph オブジェクトを作成します。新しいスコープには、子スコープで呼び出される Op コンストラクター関数によるエラーを示すために使用される Status オブジェクトもあります。 Op コンストラクター関数は、op の構築に進む前に、ok() メソッドを呼び出してスコープのステータスをチェックする必要があります。

スレッドの安全性:

Scopeオブジェクトはスレッドセーフではありません。スレッドは、同じScopeオブジェクトの op-constructor 関数を同時に呼び出すことはできません。

コンストラクターとデストラクター

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 ()
新しいスコープを返します。

公共機能

クリアコロケーション

Scope ClearColocation() const 

すべてのコロケーション制約をクリアします。

コロケーションウィズ

Scope ColocateWith(
  const Operation & op
) const 

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

返されたスコープ内で作成されたすべての op は、op が配置されるデバイス上に同じ場所に配置されます。注: この関数は、デバイスへの op の配置を制御する目的でのみ内部ライブラリを使用することを目的としています。デバイスの配置の実装は変更される可能性があるため、一般公開は推奨されません。

コロケーションウィズ

Scope ColocateWith(
  const Output & out
) const 

上記の便利な機能です。

ExitOnError

Scope ExitOnError() const 

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

返されたスコープをスコープ引数として受け取る op-constructor 関数は、スコープにステータスを設定するのではなく、エラーが検出されるとすぐに終了します。

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 

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

このスコープで作成された Ops には、プレフィックスとして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に設定されます。

WithControlDependency

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

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

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

WithControlDependency

Scope WithControlDependencies(
  const Output & control_dep
) const 

上記と同じですが、control_dep 出力を生成する操作にコントロールの依存関係を追加すると便利です。

デバイスあり

Scope WithDevice(
  const string & device
) const 

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

返されたスコープ内で作成されたすべての op の device フィールドは「device」に設定されます。

カーネルラベルあり

Scope WithKernelLabel(
  const string & kernel_label
) const 

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

新しいスコープで作成されたすべての op は、「_kernel」属性の値として kernel_label を持ちます。

WithNoControlDependency

Scope WithNoControlDependencies() const 

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

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

WithOpName

Scope WithOpName(
  Ty... fragments
) const 

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

返されたスコープ内で作成されたすべての op の名前はname/StrCat(fragments...)[_suffix]という形式になります。

XlaCluster 付き

Scope WithXlaCluster(
  const string & xla_cluster
) const 

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

返されたスコープ内で作成されたすべての op の _XlaCluster 属性はxla_clusterに設定されます。

コントロールデプス

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

グラフ

Graph * graph() const 

グラフ_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()

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

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