テンソルフロー::範囲
#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) | Scope & |
status () const | Status |
パブリック静的関数 | |
---|---|
NewRootScope () | 新しいスコープを返します。 |
公共機能
コロケーションウィズ
Scope ColocateWith( const Operation & op ) const
新しいスコープを返します。
返されたスコープ内で作成されたすべての op は、op が配置されるデバイス上に同じ場所に配置されます。注: この関数は、デバイスへの op の配置を制御する目的でのみ内部ライブラリを使用することを目的としています。デバイスの配置の実装は変更される可能性があるため、一般公開は推奨されません。
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
状態
Status status() const
~スコープ
~Scope()
パブリック静的関数
新しいルートスコープ
Scope NewRootScope()
新しいスコープを返します。
これにより、新しいグラフが作成され、このグラフで構築されたすべての操作は、返されたオブジェクトを「ルート」スコープとして使用する必要があります。