このページは Cloud Translation API によって翻訳されました。
Switch to English

tf.Graph

TensorFlow 1つのバージョン GitHubの上のソースを表示

データフローグラフとして表さTensorFlow計算、。

ノートPCで使用されます

チュートリアルで使用されます

グラフはで使用されているtf.function関数の計算を表現するために、S。各グラフは、一連の含有tf.Operation計算の単位を表すオブジェクトを、。そしてtf.Tensor操作の間を流れるデータの単位を表すオブジェクト。

直接グラフを使用して(廃止)

A tf.Graph構築されずに直接使用することができるtf.functionとしてTensorFlow 1で必要であったが、これは廃止され、使用することを推奨しtf.function代わりに。グラフを直接使用される場合、他の非推奨TensorFlow 1クラスはまたなど、グラフを実行するために必要とされるtf.compat.v1.Session

デフォルトのグラフはに登録することができtf.Graph.as_defaultコンテキストマネージャ。次いで、操作がグラフに追加される代わりに、熱心に実行されます。例えば:

 g = tf.Graph()
with g.as_default():
  # Define operations and tensors in `g`.
  c = tf.constant(30.0)
  assert c.graph is g
 

tf.compat.v1.get_default_graph()デフォルトのグラフを得るために使用することができます。

重要な注意:このクラスはスレッドセーフなグラフ構築のためではありません 。すべての操作は、単一のスレッドから作成する必要がある、または外部同期が提供されなければなりません。特に指定がない限り、すべてのメソッドは、スレッドセーフではありません。

Graphインスタンスは名前で識別され、「コレクション」の任意の数をサポートしています。大規模なグラフを構築する際に便利な、コレクションは、関連するオブジェクトのグループを保存することができます。たとえば、 tf.Variable (名前付きコレクション使用tf.GraphKeys.GLOBAL_VARIABLESグラフの構築時に作成されたすべての変数のため)。呼び出し側は、新しい名前を指定することによって、追加のコレクションを定義することができます。

building_function このグラフは、関数を表す場合はtrueを返します。
collections このグラフに知られているコレクションの名前を返します。
finalized このグラフは、ファイナライズされている場合はTrue。
graph_def_versions このグラフのGraphDefのバージョン情報。

各バージョンの意味の詳細については、参照GraphDef

seed このグラフのグラフレベルランダムシード。
version OPSとして増加がグラフに追加されていることをバージョン番号を返します。

これはとは関係のないことに注意してくださいtf.Graph.graph_def_versions

メソッド

add_to_collection

ソースを表示

店舗はvalue与えられたとのコレクションにname

コレクションはセットではありませんので、コレクションに数回値を追加することが可能であることに注意してください。

引数
name コレクションのキー。 GraphKeysクラスは、コレクションの多くの標準的な名前が含まれています。
value コレクションに追加する値。

add_to_collections

ソースを表示

店舗は、 valueによって与えられたコレクションでnames

コレクションはセットではありませんので、コレクションに数回値を追加することが可能であることに注意してください。この機能は、内の重複ことを確認しますnames無視されますが、それはの既存のメンバーシップをチェックしませんvalue内のコレクションのいずれかでnames

names任意の反復可能とすることができるが、場合names文字列であり、それは、単一のコレクション名として扱われます。

引数
names に追加するコレクションのキー。 GraphKeysクラスは、コレクションの多くの標準的な名前が含まれています。
value コレクションに追加する値。

as_default

ソースを表示

この作るコンテキストマネージャを返しGraphのデフォルトのグラフを。

あなたが同じプロセスで複数のグラフを作成したい場合は、この方法を使用する必要があります。便宜上、グローバルなデフォルトのグラフが提供され、明示的に新しいグラフを作成しない場合、すべてのOPSは、このグラフに追加されます。

で、この方法を使用するwith 、ブロックの範囲内で作成OPSがこのグラフに追加されるべきであることを指定するキーワード。範囲一旦この場合、 with終了し、以前のデフォルトのグラフは、デフォルトとして再設定されています。それは、複数のネストされたレベル持ってOKですので、スタックは、ありas_default電話を。

デフォルトのグラフは、現在のスレッドのプロパティです。あなたが新しいスレッドを作成し、そのスレッドのデフォルトのグラフを使用したい場合は、明示的に追加する必要がありますwith g.as_default():そのスレッドの機能に。

次のコード例は等価です。

 # 1. Using Graph.as_default():
g = tf.Graph()
with g.as_default():
  c = tf.constant(5.0)
  assert c.graph is g

# 2. Constructing and making default:
with tf.Graph().as_default() as g:
  c = tf.constant(5.0)
  assert c.graph is g
 

熱心な実行が有効になっている場合は、このコンテキストマネージャの下で作成されたOPSがグラフに追加の代わりに、熱心に実行されます。

戻り値
デフォルトのグラフのように、このグラフを使用するためのコンテキストマネージャ。

as_graph_def

ソースを表示

連載返しGraphDefこのグラフの表現を。

シリアル化GraphDef他にインポートすることができるGraph (使用tf.import_graph_def )または一緒に使用C ++セッションAPI

このメソッドは、スレッドセーフです。

引数
from_version オプション。これが設定されている場合、戻りGraphDefそのため、このグラフに追加されたノードのみを含むversionプロパティが指定された値を有しています。
add_shapes trueの場合、その出力の各の推論形状の各ノードへの「_output_shapes」リストATTRを追加します。

戻り値
A GraphDefプロトコルバッファ。

発生させます
ValueError 場合graph_def大きすぎるだろう。

as_graph_element

ソースを表示

オブジェクトがによって参照を返しobjとして、 OperationまたはTensor

この関数は、検証objこのグラフの要素を表し、それがない場合に有益なエラーメッセージを表示します。

この機能は、/取得のセッションAPIの外部の引数の参照から許可されたタイプの1のオブジェクトを検証するための標準的な方法です。

この方法は、複数のスレッドから同時に呼び出すことができます。

引数
obj A TensorOperation 、またはテンソルまたは操作の名前。また有する任意のオブジェクトであることができる_as_graph_element()これらのタイプのいずれかの値を返す方法。注: _as_graph_element 、グラフのロックの内部で呼び出されますので、グラフを変更することはできません。
allow_tensor trueの場合、 objを参照することがTensor
allow_operation trueの場合、 objを参照することがOperation

戻り値
TensorOperationのグラフでは、対応するobj

発生させます
TypeError 場合objタイプではありません、私たちは型に変換しようとサポートしています。
ValueError もしobj適切な型が、無効なのです。たとえば、無効な文字列。
KeyError 場合objグラフ内のオブジェクトではありません。

clear_collection

ソースを表示

コレクション内のすべての値をクリアします。

引数
name コレクションのキー。 GraphKeysクラスは、コレクションの多くの標準的な名前が含まれています。

colocate_with

ソースを表示

を配置し、OPを指定するコンテキストマネージャを返します。

例えば:

 a = tf.Variable([1.0])
with g.colocate_with(a):
  b = tf.constant(1.0)
  c = tf.add(a, b)
 

bcいつもと同じ場所に配置され、問題ありません最終的に配置されます。 a a

場合opありませんNone 、その後ignore_existingでなければならないTrueと新しいスコープは、すべてのコロケーションやデバイスの制限をリセットします。

引数
op すべての作成とOPS、または配置し、OP None
ignore_existing trueの場合、だけではなく、スタック上のすべてのコロケーションのプロパティを適用するよりも、文脈の中で、このオペアンプのコロケーションを適用します。場合opありませんNone 、この値はでなければならないTrue

発生させます
ValueError opはNoneですが、ignore_existingはFalseの場合。

収量:

新しく作成されたOPSを配置してオペアンプを指定するコンテキストマネージャ。

container

ソースを表示

戻り値を使用するリソースコンテナを指定するコンテキストマネージャ。

彼らは複数のプロセスで共有することができるように、このような変数やキューなどのステートフルオペレーションは、デバイス上でそれらの状態を維持することができます。リソースコンテナは、これらのステートフルな動作が追跡され、その下の文字列名です。これらのリソースは、でリリースまたはクリアすることができますtf.Session.reset()

例えば:

 with g.container('experiment0'):
  # All stateful Operations constructed in this context will be placed
  # in resource container "experiment0".
  v1 = tf.Variable([1.0])
  v2 = tf.Variable([2.0])
  with g.container("experiment1"):
    # All stateful Operations constructed in this context will be
    # placed in resource container "experiment1".
    v3 = tf.Variable([3.0])
    q1 = tf.queue.FIFOQueue(10, tf.float32)
  # All stateful Operations constructed in this context will be
  # be created in the "experiment0".
  v4 = tf.Variable([4.0])
  q1 = tf.queue.FIFOQueue(20, tf.float32)
  with g.container(""):
    # All stateful Operations constructed in this context will be
    # be placed in the default resource container.
    v5 = tf.Variable([5.0])
    q3 = tf.queue.FIFOQueue(30, tf.float32)

# Resets container "experiment0", after which the state of v1, v2, v4, q1
# will become undefined (such as uninitialized).
tf.Session.reset(target, ["experiment0"])
 

引数
container_name コンテナ名の文字列。

戻り値
ステートフルオペレーションのためのリソースコンテナを定義するためのコンテキストマネージャは、コンテナ名を生成します。

control_dependencies

ソースを表示

指定の依存関係を制御することをコンテキストマネージャを返します。

で使用withコンテキスト内で構築されたすべての操作は、上の制御依存していなければならないことを指定するキーワードcontrol_inputs 。例えば:

 with g.control_dependencies([a, b, c]):
  # `d` and `e` will only run after `a`, `b`, and `c` have executed.
  d = ...
  e = ...
 

複数の呼び出しcontrol_dependencies()入れ子にすることができ、その場合には、新たなOperationの労働組合に制御依存関係を持つことになりますcontrol_inputsすべてのアクティブコンテキストから。

 with g.control_dependencies([a, b]):
  # Ops constructed here run after `a` and `b`.
  with g.control_dependencies([c, d]):
    # Ops constructed here run after `a`, `b`, `c`, and `d`.
 

あなたは、制御依存関係をクリアするにはNoneを渡すことはできません。

 with g.control_dependencies([a, b]):
  # Ops constructed here run after `a` and `b`.
  with g.control_dependencies(None):
    # Ops constructed here run normally, not waiting for either `a` or `b`.
    with g.control_dependencies([c, d]):
      # Ops constructed here run after `c` and `d`, also not waiting
      # for either `a` or `b`.
 
 # WRONG
def my_func(pred, tensor):
  t = tf.matmul(tensor, tensor)
  with tf.control_dependencies([pred]):
    # The matmul op is created outside the context, so no control
    # dependency will be added.
    return t

# RIGHT
def my_func(pred, tensor):
  with tf.control_dependencies([pred]):
    # The matmul op is created in the context, so a control dependency
    # will be added.
    return tf.matmul(tensor, tensor)
 

また、この範囲の下で作成されたオペレーションの実行が依存関係の実行をトリガしますが、この範囲の下で作成されたOPSはまだ通常のtensorflowグラフから剪定されるかもしれないことに注意してください。たとえば、次のコードスニペットに依存関係が実行されることはありません。

   loss = model.loss()
  with tf.control_dependencies(dependencies):
    loss = loss + tf.constant(1)  # note: dependencies ignored in the
                                  # backward pass
  return tf.gradients(loss, model.variables)
 

評価勾配グラフを一定往路で作成(1)OPを評価する必要がないからです。

引数
control_inputs リストOperation又はTensorコンテキストで定義されたオペレーションを実行する前に実行または計算されなければならないオブジェクト。また、になることはできませんNone制御依存関係をクリアします。

戻り値
コンテキストマネージャは、指定コンテキスト内に構築すべての操作のための依存関係を制御すること。

発生させます
TypeError 場合control_inputsのリストではありませんOperationTensorオブジェクト。

create_op

ソースを表示

作成Operation 、このグラフに。 (非推奨の引数)

これは、作成するための低レベルのインタフェースでOperation 。ほとんどのプログラムは、このメソッドを直接呼び出して、代わりのようなPythonのOPコンストラクタ、使用しませんtf.constant()デフォルトのグラフにOPSを追加し、。

引数
op_type Operationタイプを作成します。この対応OpDef.name動作を規定プロトするフィールド。
inputs リストTensorそれはへの入力されるオブジェクトOperation
dtypes (オプション)のリストDTypeその動作が生じることテンソルの種類されるオブジェクト。
input_types (オプション)のリストDType動作消費することテンソルの種類になります秒。デフォルトでは、基地使用DTypeの各入力のinputs 。参照型指定された入力を期待する操作を指定しなければなりませんinput_types明示。
name 操作のための(オプション)Aの文字列名。指定しない場合、名前はに基づいて生成されるop_type
attrs (オプション)キーは属性名(文字列)であり、値はそれぞれである辞書attrの属性NodeDef操作(代表するプロトAttrValueプロトを)。
op_def (オプション。) OpDef説明プロトop_type操作が持っていることを。
compute_shapes (オプション。)推奨されていません。何の効果もありません(形状が常に計算されます)。
compute_device (オプション。)Trueの場合、デバイスの機能は、操作のデバイス特性を計算するために実行されます。

発生させます
TypeError 入力のいずれかがない場合はTensor
ValueError 既存のデバイスの割り当てとコロケーション競合する場合。

戻り値
Operationオブジェクト。

device

ソースを表示

戻り値に使用するデフォルトのデバイスを指定するコンテキストマネージャ。

device_name_or_function引数には、いずれかのデバイス名文字列、デバイス機能、またはNoneことがあります

  • それはデバイス名の文字列である場合、ネストされたことによって上書きされない限り、この文脈において構築すべての操作は、その名前のデバイスに割り当てられるdevice()コンテキスト。
  • それが関数の場合は、デバイス名の文字列への操作オブジェクトから関数として扱われ、新しい操作が作成されるたびに呼び出されます。操作は、返される名前で、デバイスに割り当てられます。
  • それがNoneの場合は、すべてのdevice()囲んでいるコンテキストからの呼び出しは無視されます。

デバイス名の文字列の有効な構文については、内のドキュメントを参照DeviceNameUtils

例えば:

 with g.device('/device:GPU:0'):
  # All operations constructed in this context will be placed
  # on GPU 0.
  with g.device(None):
    # All operations constructed in this context will have no
    # assigned device.

# Defines a function from `Operation` to device string.
def matmul_on_gpu(n):
  if n.type == "MatMul":
    return "/device:GPU:0"
  else:
    return "/cpu:0"

with g.device(matmul_on_gpu):
  # All operations of type "MatMul" constructed in this context
  # will be placed on GPU 0; all other operations will be placed
  # on CPU 0.
 

引数
device_name_or_function コンテキストで使用するデバイス名または関数。

収量:

新しく作成されたオペレーションのために使用するデフォルトのデバイスを指定するコンテキストマネージャ。

発生させます
RuntimeError デバイススコープが適切にネストされていない場合。

finalize

ソースを表示

それは読み取り専用になって、このグラフをファイナライズします。

呼び出した後g.finalize()新しい操作はに追加することはできませんg 。この方法は、使用する場合、例えば、それは複数のスレッド間で共有されているときに何も操作がグラフに追加されないことを保証するために使用されるtf.compat.v1.train.QueueRunner

get_all_collection_keys

ソースを表示

このグラフで使用されるコレクションのリストを返します。

get_collection

ソースを表示

与えられて、コレクション内の値のリストを返しますname

これは異なっているget_collection_ref()それが、新しいリストにそれが呼び出されるたびに返すことに存在する場合は、必ず実際のコレクションリストを返します。

引数
name コレクションのキー。例えば、 GraphKeysクラスは、コレクションのための多くの標準的な名前が含まれています。
scope (オプション。)A列。指定した場合、結果のリストは、その項目のみ含まれるようにフィルタリングされるname属性一致するscope使用してre.match 。なしのアイテムnameスコープが供給されている場合は属性が返されることはありません。選択re.matchことを意味scope特別なトークンなしでは、接頭辞でフィルタリングします。

戻り値
与えられたとコレクション内の値のリストnameは値をそのコレクションに追加されていない場合、または空のリスト。リストには、彼らが収集された下の順に値が含まれています。

get_collection_ref

ソースを表示

与えられて、コレクション内の値のリストを返しますname

コレクションが存在する場合、これはコレクションを変更するための場所で変更することができ、リストそのものを返します。コレクションが存在しない場合は、空のリストとして作成され、リストが返されます。

これは異なっているget_collection()が存在し、空のコレクションを作成したことがない場合は、常に収集リストのコピーを返します。

引数
name コレクションのキー。例えば、 GraphKeysクラスは、コレクションのための多くの標準的な名前が含まれています。

戻り値
与えられたとコレクション内の値のリストnameは値をそのコレクションに追加されていない場合、または空のリスト。

get_name_scope

ソースを表示

現在の名前スコープを返します。

例えば:

 with tf.name_scope('scope1'):
  with tf.name_scope('scope2'):
    print(tf.compat.v1.get_default_graph().get_name_scope())
 

文字列を印刷しscope1/scope2

戻り値
現在の名前スコープを表す文字列。

get_operation_by_name

ソースを表示

戻り値Operation与えられたとのname

この方法は、複数のスレッドから同時に呼び出すことができます。

引数
name 名前Operation戻ります。

戻り値
Operation与えられたとのname

発生させます
TypeError もしname文字列ではありません。
KeyError 場合name 、このグラフの操作に対応していません。

get_operations

ソースを表示

グラフの操作のリストを返します。

あなたは場所での操作を変更することができますが、そのようなインサートとしてリストへの変更は、/グラフに知られている操作のリストには影響しません削除します。

この方法は、複数のスレッドから同時に呼び出すことができます。

戻り値
操作のリスト。

get_tensor_by_name

ソースを表示

返しTensor与えられたとのname

この方法は、複数のスレッドから同時に呼び出すことができます。

引数
name 名前Tensor復帰します。

戻り値
Tensor与えられたとのname

発生させます
TypeError もしname文字列ではありません。
KeyError 場合name 、このグラフのテンソルに対応していません。

gradient_override_map

ソースを表示

実験:勾配関数をオーバーライドするためのコンテキストマネージャ。

このコンテキストマネージャは、コンテキストの範囲内でOPSに使用される勾配関数をオーバーライドするために使用することができます。

例えば:

 @tf.RegisterGradient("CustomSquare")
def _custom_square_grad(op, grad):
  # ...

with tf.Graph().as_default() as g:
  c = tf.constant(5.0)
  s_1 = tf.square(c)  # Uses the default gradient for tf.square.
  with g.gradient_override_map({"Square": "CustomSquare"}):
    s_2 = tf.square(s_2)  # Uses _custom_square_grad to compute the
                          # gradient of s_2.
 

引数
op_type_map 代替のop型の文字列にマッピングする辞書OPタイプ文字列。

戻り値
そのコンテキストで作成された一の以上のopに使用される別の演算種類を設定するコンテキストマネージャ。

発生させます
TypeError 場合op_type_map文字列への辞書マッピング文字列ではありません。

is_feedable

ソースを表示

戻り値True場合に限り、 tensor供給可能です。

is_fetchable

ソースを表示

戻り値True場合にのみtensor_or_opフェッチ可能です。

name_scope

ソースを表示

操作の階層名を作成するコンテキストマネージャを返します。

グラフは名前スコープのスタックを維持しています。 with name_scope(...):ステートメントは、コンテキストの有効期間のためのスタックに新しい名前をプッシュ。

name引数は次のとおりに解釈されます。

  • (「/」で終わらない)文字列は、ここで新しい名前スコープ、作成します。 nameコンテキストで作成されたすべての操作の接頭辞に追加されています。場合はname以前に使用されてきた、それが呼び出すことによって、ユニーク行われますself.unique_name(name)
  • スコープは、以前からキャプチャwith g.name_scope(...) as scope:ステートメントが再入力、既存のスコープすることが可能となり、「絶対」名のスコープとして扱われます。
  • Noneまたは空の文字列は、トップレベル(空の)名前スコープに現在の名前スコープをリセットします。

例えば:

 with tf.Graph().as_default() as g:
  c = tf.constant(5.0, name="c")
  assert c.op.name == "c"
  c_1 = tf.constant(6.0, name="c")
  assert c_1.op.name == "c_1"

  # Creates a scope called "nested"
  with g.name_scope("nested") as scope:
    nested_c = tf.constant(10.0, name="c")
    assert nested_c.op.name == "nested/c"

    # Creates a nested scope called "inner".
    with g.name_scope("inner"):
      nested_inner_c = tf.constant(20.0, name="c")
      assert nested_inner_c.op.name == "nested/inner/c"

    # Create a nested scope called "inner_1".
    with g.name_scope("inner"):
      nested_inner_1_c = tf.constant(30.0, name="c")
      assert nested_inner_1_c.op.name == "nested/inner_1/c"

      # Treats `scope` as an absolute name scope, and
      # switches to the "nested/" scope.
      with g.name_scope(scope):
        nested_d = tf.constant(40.0, name="d")
        assert nested_d.op.name == "nested/d"

        with g.name_scope(""):
          e = tf.constant(50.0, name="e")
          assert e.op.name == "e"
 

スコープ自体の名前によって捕捉することができるwith g.name_scope(...) as scope: 、変数にスコープの名前を格納するscope 。この値は、範囲内のOPSの実行の全体的な結果を表す操作に名前を付けるために使用することができます。例えば:

 inputs = tf.constant(...)
with g.name_scope('my_layer') as scope:
  weights = tf.Variable(..., name="weights")
  biases = tf.Variable(..., name="biases")
  affine = tf.matmul(inputs, weights) + biases
  output = tf.nn.relu(affine, name=scope)
 
 [A-Za-z0-9.][A-Za-z0-9_.\-/]* (for scopes at the root)
[A-Za-z0-9_.\-/]* (for other scopes)
 

引数
name スコープの名前。

戻り値
インストールコンテキストマネージャname新しい名前スコープとして。

発生させます
ValueError もしname上記の規則によると、有効なスコープ名ではありません。

prevent_feeding

ソースを表示

マーク所与tensorこのグラフでunfeedableとして。

prevent_fetching

ソースを表示

マーク所与opこのグラフでunfetchableとして。

switch_to_thread_local

ソースを表示

デバイス、コロケーションおよび依存関係のスタックスレッドローカルにします。

デバイス、コロケーションと依存スタックは、スレッドローカルでの既定ではありません。複数のスレッドがそれらにアクセスする場合は、状態が共有されています。この手段その1つのスレッドが別のスレッドの動作に影響を与える可能性があります。

このメソッドが呼び出された後、スタックは、スレッドローカルになります。複数のスレッドがアクセスした場合、その後、状態は共有されません。各スレッドは、独自の値を使用しています。スレッドには、そのようなスタックを変異させることによって、他のスレッドには影響を与えません。

すべてのスレッドのスタックの初期値は、スタックするときの現在の値に設定されているswitch_to_thread_local()最初に呼ばれました。

unique_name

ソースを表示

一意の操作名を返しname

unique_nameで区切られた構成の名前、生成するために使用される"/"グラフをデバッグするときの動作を特定するために、。操作名は、エラーメッセージに表示されているTensorFlowランタイムによって、そのようなTensorBoardなど様々な可視化ツールで報告。

場合mark_as_usedに設定されているTrueデフォルトで、新しい一意の名前が作成され、使用中としてマークされています。それの設定した場合はFalse 、一意の名前は、実際に使用されるようにマークされずに返されます。呼び出し側が単純に作成する名前が何であるか知りたいときに便利です。

引数
name 操作の名前。
mark_as_used 使用されているとして、この名前をマークするかどうか。

戻り値
渡される文字列create_op()作成中の操作に名前を付けるために使用されます。