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) | Scope & |
status () const | Status |
パブリック静的関数 | |
|---|---|
NewRootScope () | 新しいスコープを返します。 |
公的機能
共存する
Scope ColocateWith( const Operation & op ) 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
状態
Status status() const
~範囲
~Scope()
パブリック静的関数
NewRootScope
Scope NewRootScope()
新しいスコープを返します。
これにより新しいグラフが作成され、このグラフ内で構築されるすべての操作は、返されたオブジェクトを「ルート」スコープとして使用する必要があります。