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 は忘れられます。

 

Note

F.forget は F.dropout() や F.negative_sampling()のように、同じ入力で何回も呼び出した時に異なる動作をする関数をサポートしていません。

Note

入力変数が  numpy.ndarray や cupy.ndarray オブジェクトのクラスの場合、引数は自動で Variableに変換されます。この関数で逆方向の計算を可能にするため、計算グラフに含まれることを確実にする目的でこの変換が行われます。

Parameters:
  • func (callable) – 呼び出す関数名。Variable オブジェクトと共に呼び出される必要があり、 Variable オプジェクトか Variable オブジェクトのタプルを返す必要があります。.
  • xs (Variable) –指定した 関数の引数variables 。
Returns:

variable func が返る。タプルを返す場合はメソッドもタプルを返す。. 

Return type:

Variable