警告:このAPIは非推奨であり、置き換えが安定した後 TensorFlowの将来のバージョンで削除される予定です。

StopGradient

パブリックファイナルクラスStopGradient

勾配計算を停止します。

グラフで実行すると、この演算は入力テンソルをそのまま出力します。

勾配を計算するための操作を作成する場合、この操作により、入力の寄与が考慮されなくなります。通常、勾配ジェネレーターは、グラフにopsを追加して、計算に寄与した入力を再帰的に見つけることにより、指定された「損失」の導関数を計算します。このopをグラフに挿入すると、入力はグラデーションジェネレーターからマスクされます。これらは、勾配の計算には考慮されません。

これは、TensorFlowを使用して値を計算したいが、値が定数であるかのように見せかける必要がある場合に役立ちます。たとえば、ベクトルxのsoftmax関数は

def softmax(x):
     numerator = tf.exp(x)
     denominator = tf.reduce_sum(numerator)
     return numerator / denominator
 
と書くことができます。ただし、xの値が大きい場合、これはオーバーフローの影響を受けやすくなります。別のより安定した方法は、各値からxの最大値を引くことです。
def stable_softmax(x):
     z = x - tf.reduce_max(x)
     numerator = tf.exp(z)
     denominator = tf.reduce_sum(numerator)
     return numerator / denominator
 
ただし、softmaxを介してxにバックプロパゲーションする場合、 tf.reduce_max(x) (最大値が一意でない場合、勾配は間違った入力に流れる可能性があります)の計算を介してバックプロパゲーションを行い、それを次のように扱います。定数。したがって、これを
def stable_softmax(x):
     z = x - tf.stop_gradient(tf.reduce_max(x))
     numerator = tf.exp(z)
     denominator = tf.reduce_sum(numerator)
     return numerator / denominator
 
と書き出す必要があります。他の例としては、次のようなものがあります。
  • MステップEステップの出力を介したバックプロパゲーションを伴わないEMアルゴリズム。
  • ボルツマンマシンの対照的な発散トレーニング。エネルギー関数を微分するときに、トレーニングはモデルからサンプルを生成したグラフを逆伝播してはなりません。
  • 敵対的トレーニング。敵対的例の生成プロセスを通じてバックプロパゲーションが発生しないようにする必要があります。

パブリックメソッド

出力<T>
asOutput ()
テンソルのシンボリックハンドルを返します。
static <T> StopGradient <T>
createスコープスコープ、オペランド<T>入力)
新しいStopGradient操作をラップするクラスを作成するファクトリメソッド。
出力<T>
出力()

継承されたメソッド

パブリックメソッド

public Output <T> asOutput ()

テンソルのシンボリックハンドルを返します。

TensorFlow操作への入力は、別のTensorFlow操作の出力です。このメソッドは、入力の計算を表すシンボリックハンドルを取得するために使用されます。

public static StopGradient <T> create スコープスコープ、オペランド<T>入力)

新しいStopGradient操作をラップするクラスを作成するファクトリメソッド。

パラメーター
範囲現在のスコープ
戻り値
  • StopGradientの新しいインスタンス

public Output <T> output ()