chainer.functions.
forget
(func, *xs)[source]
中間の結果を格納せずに関数を呼び出す。
順方向のプロパゲーションで、 Chainer は通常、バックプロパゲーションで要求されるので、計算グラフ上の VariableNode
の全ての中間の結果を格納します。時により、これらの結果が目盛りを消費しすぎることがあります。F.forget
はそのような順方向プロパゲーションの中間結果を文字通り忘れさりつつ、自動的に再計算してバックプロパゲーションをサポートします。
順方向のプロパゲーションで、 F.forget
は与えられた関数を与えられた変数で計算グラフを生成せずに呼び出します。 逆方向のプロパゲーションでは、 F.forget
は与えられた関数を再び呼び出し、バックプロパゲーションのための計算グラフを生成します。
F.forget
は内部の目盛り消費量を減らしますが、同じ関数を2回呼び出すため、より多くの計算時間が必要になります。
Example
f
を 次のような関数と定義します。
>>> def f(a, b):
... return a + b + a
そして、 x
と y
を Variable
とします。
>>> x = chainer.Variable(np.random.uniform(-1, 1, 5).astype('f'))
>>> y = chainer.Variable(np.random.uniform(-1, 1, 5).astype('f'))
z
が z =
f(x, y)
として計算を行うときには、中間結果 x + y
はメモリに格納されます。
その替わりに、f
を F.forget
で呼び出すと
>>> z = F.forget(f, x, y)
中間値 x + y
は忘れられます。
F.forget
は F.dropout()
や F.negative_sampling()
のように、同じ入力で何回も呼び出した時に異なる動作をする関数をサポートしていません。
入力変数が numpy.ndarray
や cupy.ndarray
オブジェクトのクラスの場合、引数は自動で Variable
に変換されます。この関数で逆方向の計算を可能にするため、計算グラフに含まれることを確実にする目的でこの変換が行われます。
Parameters: | |
---|---|
Returns: |
variable |
Return type: |