旧スタイルの微分可能な関数(function)のインタフェース。
このクラスは旧スタイルの微分可能な関数(function)実装のインタフェースを提供します。つまり、この function application は計算グラフに記録されます。 forward()
と backward()
を実装しているFunction
のサブクラスは、順方向の計算を走らせるのに用いることが可能で、自動的にバックプロパゲーションを行わせます。
このようなFunctionの異なる実装方法もあります。それは、サブクラスになっている FunctionNode
です。これら2つの間には大きな違いがあります。
FunctionNode
に利用可能であると同時に、 Function
では利用できません。Functionの backward()
は、 Variable
オブジェクトではなく直接配列を操作するため、計算のヒストリを記録できないからです。
backward()
に渡される情報は異なります。 FunctionNode
では、不必要な計算を省くために、勾配を計算しなければいけない関数ノード(function node)が渡されます。それに対して、 Function
は全ての入力ノードについて、常に勾配を計算しなければなりません。 FunctionNode
は、効率的なカーネルが利用可能な場合に、累算処理が勾配計算とマージされ得るように、現在の入力ノードの勾配変数を受け入れます。
このクラスはこのインタフェースを FunctionNode
へ変換するために FunctionAdapter
を使用し、 FunctionNode
オブジェクトを計算グラフに加えます。
Chainerにおける計算グラフの構築の詳細については、 FunctionNode
もお読みください。
Methods
__call__
(*inputs)[source]
後方参照を連鎖化する順伝播に用いる。
このメソッドは新しい FunctionAdapter
オブジェクトを生成し、それを用いた順伝播を実行する。
計算グラフの構築に関する挙動の詳細はFunctionNode
もお読みください。
パラメータ: |
inputs –
この入力が |
---|---|
戻り値: |
1つの Variable オブジェクトもしくは 複数の Variable オブジェクトのタプル。
|
add_hook
(hook, name=None)[source]
関数フックを登録する。
詳細は FunctionNode.add_hook()
をお読みください。
Parameters: |
|
---|
backward
(inputs, grad_outputs)[source]
出力勾配配列に逆伝播を適用する。
デフォルトで、処理を backward_cpu()
か backward_gpu()
に委譲(訳注:丸投げ)します。どちらになるかは、 入力の配列か出力の勾配配列の型によって決定されます。この関数が逆伝播される(backprop-ed)ようになっている場合、 Function
の実装は、CPU/GPU メソッドかこのメソッドを実装しなければなりません。
Parameters: |
|
---|---|
Returns: |
入力勾配配列のタプル。この関数が入力によって微分可能ではない時、戻り値の全てもしくは一部が |
Return type: |
Function
の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
backward_cpu
(inputs, grad_outputs)[source]
CPU上の出力勾配配列に逆伝播を適用する。
Parameters: |
|
---|---|
Returns: |
入力勾配の |
Return type: |
Function
の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
backward_gpu
(inputs, grad_outputs)[source]
GPU上の出力勾配配列に逆伝播を適用する。
Parameters: |
|
---|---|
Returns: |
入力勾配の |
Return type: |
Function
の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
check_type_forward
(in_types)[source]
順伝播の前に入力データの型をチェックする。
forward()
が呼び出される前に、この関数が呼び出されます。この関数で the type checking utilitiesを用いて、入力データの型を検証する必要があります。
Parameters: |
in_types (TypeInfoTuple) – forward() のための入力データの型情報。
|
---|
forward
(inputs)[source]
入力配列に順伝播を適用する。
デフォルトで処理を forward_cpu()
もしくは forward_gpu()
へ委譲(丸投げ)します。入力配列の型によって、どちらの関数を選ぶか決定します。 Implementations of Function
の実装は、CPU/GPU メソッドかこのメソッドのいずれかを実装しなければなりません。
Parameters: | inputs –入力配列のタプル |
---|---|
Returns: | 出力配列のタプル |
Function
の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
forward_cpu
(inputs)[source]
順伝播を CPU上で入力配列に適用します。
Parameters: |
inputs – numpy.ndarray オブジェクトのタプル
|
---|---|
Returns: |
numpy.ndarray オブジェクトのタプル
|
Return type: | tuple |
Function
の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
forward_gpu
(inputs)[source]
順伝播を GPU上で入力配列に適用します。
Parameters: |
inputs – cupy.ndarray オブジェクトのタプル
|
---|---|
Returns: |
cupy.ndarray オブジェクトのタプル
|
Return type: | tuple |
Function
の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
retain_inputs
(indexes)[source]
データ配列を保持している入力Variableを指定する。
forward()
からこのメソッドを呼び出すことで、
この関数はどの入力が逆伝播に必要か指定することが出来ます。このメソッドが呼び出された場合、この関数は全ての入力配列を保全します。全ての入力配列を開放したいという場合は、このメソッドを空のシーケンスを渡して呼び出してください。
この挙動はFunctionNode.retain_inputs()
とは異なりますので、注意してください。
このメソッドはforwardメソッドの外側から呼び出してはいけませんので、注意してください。
Parameters: | indexes (iterable of int) – この関数が逆伝播のために必要としない入力Variableのインデクス。 |
---|
retain_outputs
(indexes, retain_after_backward=False)[source]
データ配列を保全する出力Variableノードを指定する。
forward()
からこのメソッドを呼び出すことによって、このFunctionは、どの出力が逆伝播に必要か指定することが出来ます。 このメソッドが呼び出されない場合、 __call__()
から戻るポイントで、どの出力Variableもデータ配列を保持するためのマークをされることはありません。保持された配列はoutput_data
に格納されます。
このメソッドはforwardメソッドの外側から呼び出してはいけないので、注意してください。
Parameters: |
|
---|
unchain
()[source]
このFunction自身と入出力ノードをグラフから消去する。
詳細は、 FunctionNode.unchain()
をお読みください。
Attributes
inputs
このFunctionの入力ノード
label
このFunctionを表すの短いテキスト。(ラベル)
デフォルト実装は型名を返します。各Functionはわかりやすくなるように情報を加えデフォルトラベルをオーバーライドすべき。
local_function_hooks
登録された関数フックのディクショナリを整える。
詳細は FunctionNode.local_function_hooks
をお読みください。
node
このFunctionをラップする FunctionAdapter
オブジェクト。
このFunctionがnodeオブジェクトを持たない場合、このプロパティは自動的に新しいnodeオブジェクトを生成します。
output_data
保存した出力配列のタプル。
outputs
と同じ長さを持ちます。保存されていない要素は None
がセットされます。
outputs
このFunctionの出力ノードへの弱い参照。
rank
位相順の対応するfunctionノード
stack