Google I/O にご注目いただきありがとうございます。すべてのセッションをオンデマンドで表示オンデマンドで見る

tensorflow ::範囲

#include <scope.h>

Scopeオブジェクトは、共通名プレフィックスなどの同じプロパティを持つ関連するTensorFlow操作のセットを表します。

概要

Scopeオブジェクトは、TensorFlowOpプロパティのコンテナです。 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)メソッドは、スコープ内で作成されたopsの名前のプレフィックスにnameを追加し、 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コンストラクターによって使用されるときに操作が追加されます。新しいスコープには、任意の子スコープで呼び出されるOp-constructor関数によるエラーを示すために使用される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
op名が指定されていない場合は、default_nameを使用して一意の名前を返します。
NewSubScope (const string & child_scope_name) const
新しいスコープを返します。
ToGraphDef (GraphDef *gdef) const
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

パブリック静的関数

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

パブリックファンクション

ClearColocation

Scope ClearColocation() const 

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

ColocateWith

Scope ColocateWith(
  const Operation & op
) const 

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

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

ColocateWith

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 

op名が指定されていない場合は、default_nameを使用して一意の名前を返します。

NewSubScope

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)を呼び出して終了します。

WithAssignedDevice

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出力を生成する操作に制御依存関係を追加すると便利です。

WithDevice

Scope WithDevice(
  const string & device
) const 

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

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

WithKernelLabel

Scope WithKernelLabel(
  const string & kernel_label
) const 

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

新しいスコープで作成されたすべての操作には、「_kernel」属性の値としてkernel_labelが含まれます。

WithNoControlDependencies

Scope WithNoControlDependencies() const 

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

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

WithOpName

Scope WithOpName(
  Ty... fragments
) const 

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

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

WithXlaCluster

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

パブリック静的関数

NewRootScope

Scope NewRootScope()

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

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