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

tf.gradients

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

和の象徴デリバティブ構築ys WRT xのxs

tf.gradientsグラフのコンテキストでのみ有効です。特に、の文脈で有効なtf.functionコードはグラフとして実行されているラッパー。

ysxsそれぞれTensorやテンソルのリスト。 grad_ysのリストであるTensorで受信した勾配保持、 ys 。リストは、同じ長さでなければなりませんys

gradients()を出力するグラフの誘導体OPSを追加ysに対してxs 。これは、のリストを返しTensor長のlen(xs)各テンソルであるsum(dy/dx)におけるyのysとにおけるxのxs

grad_ys同じ長さのテンソルのリストであるysに各Yの初期勾配を保持ys 。ときgrad_ys Noneです、我々は内の各yについて、yの形状の1つの」のテンソルを記入ys 。ユーザは、自分の初期提供することができるgrad_ys (一つは各Yの各値に対して異なる勾配を重み付けしたい場合など、)各yについて異なる初期勾配を使用して誘導体を計算します。

stop_gradientsあるTensorまたは全てに対して一定の考慮すべきテンソルのリストxs 。彼らは明示的に使用して切断されたかのように、これらのテンソルは、通じ逆伝播されることはありませんstop_gradient 。とりわけ、これは合計デリバティブとは対照的に、偏微分の計算を可能にします。例えば:

@tf.function
def example():
  a = tf.constant(0.)
  b = 2 * a
  return tf.gradients(a + b, [a, b], stop_gradients=[a, b])
example()
[<tf.Tensor: shape=(), dtype=float32, numpy=1.0>,
<tf.Tensor: shape=(), dtype=float32, numpy=1.0>]

ここで、部分誘導体gに評価[1.0, 1.0]総誘導体に比べ、 tf.gradients(a + b, [a, b])考慮の影響を取るた上でa bとに評価[3.0, 1.0] 。上記は、と等価であることに注意してください:

@tf.function
def example():
  a = tf.stop_gradient(tf.constant(0.))
  b = tf.stop_gradient(2 * a)
  return tf.gradients(a + b, [a, b])
example()
[<tf.Tensor: shape=(), dtype=float32, numpy=1.0>,
<tf.Tensor: shape=(), dtype=float32, numpy=1.0>]

stop_gradientsグラフが既に構築された後と比較して、勾配を停止させる方法を提供tf.stop_gradientグラフ構築時に使用されます。二つのアプローチを組み合わせた場合、バックプロパゲーションの両方で停止tf.stop_gradient内のノードとノードstop_gradients最初に遭遇された方、。

すべての整数テンソルは、すべてに対して一定の考慮されxs 、彼らが中に含まれているかのように、 stop_gradients

unconnected_gradients 、それがYSにグラフに接続されていない場合XSにおける各xに対して返される値を決定します。デフォルトでは、エラーに対する保護手段にNoneです。数学的にこれらの勾配を使用して要求することができるゼロで'zero'オプションを選択します。 tf.UnconnectedGradients 、以下のオプションと動作を提供します。

@tf.function
def example(use_zero):
  a = tf.ones([1, 2])
  b = tf.ones([3, 1])
  if use_zero:
    return tf.gradients([b], [a], unconnected_gradients='zero')
  else:
    return tf.gradients([b], [a], unconnected_gradients='none')
example(False)
[None]
example(True)
[<tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[0., 0.]], ...)>]

私たちはバックプロパゲーションフェーズ中に来る実用的な一例を見てみましょう。この関数は、重みに対するコスト関数の導関数を評価するために使用さWsとバイアスbs 。サンプル実装の下には、それが実際に使用されているもののexaplantionを提供しています。

@tf.function
def example():
  Ws = tf.constant(0.)
  bs = 2 * Ws
  cost = Ws + bs  # This is just an example. Please ignore the formulas.
  g = tf.gradients(cost, [Ws, bs])
  dCost_dW, dCost_db = g
  return dCost_dW, dCost_db
example()
(<tf.Tensor: shape=(), dtype=float32, numpy=3.0>,
<tf.Tensor: shape=(), dtype=float32, numpy=1.0>)

ys A Tensorまたはテンソルのリストが区別されます。
xs A Tensorまたはテンソルのリストは、分化のために使用されます。
grad_ys オプション。 A Tensor又はテンソルのリストと同じ大きさys及び各yについて計算勾配保持ys
name 一緒にすべての勾配OPSをグループ化するために使用するオプションの名前。 「グラデーション」にデフォルト設定されています。
gate_gradients Trueの場合、操作のために返された勾配の周りにタプルを追加します。これは、いくつかの競合状態を避けることができます。
aggregation_method 勾配条件を組み合わせるために使用する方法を指定します。指定できる値は、クラスで定義されている定数ですAggregationMethod
stop_gradients オプション。 A Tensorまたは貫通区別しないテンソルのリスト。
unconnected_gradients オプション。与えられた入力テンソルが接続されていないとき、勾配値が返さ指定します。指定できる値は、クラスで定義されている定数ですtf.UnconnectedGradients 、デフォルト値はありませんnone

リストTensor長さlen(xs)各テンソルであるsum(dy/dx)におけるyのysとにおけるxのxs

LookupError 間の操作の1つがx及びy登録傾斜機能を有していません。
ValueError 引数が無効な場合。
RuntimeError イーガー・モードで呼び出された場合。