class chainer.Function[source]

 

旧スタイルの微分可能な関数(function)のインタフェース。

 

このクラスは旧スタイルの微分可能な関数(function)実装のインタフェースを提供します。つまり、この function application は計算グラフに記録されます。 forward() と backward() を実装しているFunction のサブクラスは、順方向の計算を走らせるのに用いることが可能で、自動的にバックプロパゲーションを行わせます。

このようなFunctionの異なる実装方法もあります。それは、サブクラスになっている FunctionNodeです。これら2つの間には大きな違いがあります。

  1. 微分可能なバックプロパゲーションは  FunctionNodeに利用可能であると同時に、  Functionでは利用できません。Functionの backward() は、 Variableオブジェクトではなく直接配列を操作するため、計算のヒストリを記録できないからです。
  2.  backward() に渡される情報は異なります。  FunctionNodeでは、不必要な計算を省くために、勾配を計算しなければいけない関数ノード(function node)が渡されます。それに対して、 Function は全ての入力ノードについて、常に勾配を計算しなければなりません。 FunctionNode は、効率的なカーネルが利用可能な場合に、累算処理が勾配計算とマージされ得るように、現在の入力ノードの勾配変数を受け入れます。

このクラスはこのインタフェースを FunctionNode へ変換するために FunctionAdapter を使用し、 FunctionNode オブジェクトを計算グラフに加えます。

Chainerにおける計算グラフの構築の詳細については、 FunctionNode もお読みください。

 

Methods

__call__(*inputs)[source]

後方参照を連鎖化する順伝播に用いる。

 

このメソッドは新しい FunctionAdapter オブジェクトを生成し、それを用いた順伝播を実行する。

計算グラフの構築に関する挙動の詳細はFunctionNode もお読みください。

パラメータ:

inputs – Variablenumpy.ndarraycupy.ndarray オブジェクトの入力タプル。

この入力が numpy.ndarray または cupy.ndarrayだった場合、自動的にVariableでラップされる。

戻り値: 1つの Variable オブジェクトもしくは 複数の Variable オブジェクトのタプル。
add_hook(hookname=None)[source]

関数フックを登録する。

 

詳細は FunctionNode.add_hook() をお読みください。

Parameters:
  • hook (FunctionHook) – 登録する関数フック。
  • name (str) – 関数フックの名称。この名前は登録されている関数フック群で、ユニークである必要があります。 Noneの場合、関数フックのデフォルト名が使用されます。
backward(inputsgrad_outputs)[source]

出力勾配配列に逆伝播を適用する。

 

デフォルトで、処理を backward_cpu()backward_gpu() に委譲(訳注:丸投げ)します。どちらになるかは、 入力の配列か出力の勾配配列の型によって決定されます。この関数が逆伝播される(backprop-ed)ようになっている場合、 Function の実装は、CPU/GPU メソッドかこのメソッドを実装しなければなりません。

Parameters:
  • inputs – 入力配列のタプル
  • grad_outputs – 出力勾配配列のタプル
Returns:

入力勾配配列のタプル。この関数が入力によって微分可能ではない時、戻り値の全てもしくは一部が Noneをとり得る。

Return type:

tuple

Warning
 Function の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
backward_cpu(inputsgrad_outputs)[source]

CPU上の出力勾配配列に逆伝播を適用する。

 

Parameters:
  • inputs – 入力 numpy.ndarray オブジェクトのタプル
  • grad_outputs – 出力勾配 numpy.ndarray オブジェクトのタプル
Returns:

入力勾配の numpy.ndarray オブジェクトのタプル。関数が対応する入力で微分可能でないとき、戻り値の全てもしくは一部が Noneをとり得る。

Return type:

tuple

Warning
 Function の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
backward_gpu(inputsgrad_outputs)[source]

GPU上の出力勾配配列に逆伝播を適用する。

 

Parameters:
  • inputs – 入力 cupy.ndarray オブジェクトのタプル
  • grad_outputs –出力 cupy.ndarray オブジェクトのタプル
Returns:

入力勾配の cupy.ndarray オブジェクトのタプル。関数が対応する入力で微分可能でないとき、戻り値の全てもしくは一部が Noneをとり得る。

Return type:

tuple

Warning
 Function の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
check_type_forward(in_types)[source]

順伝播の前に入力データの型をチェックする。

 

forward() が呼び出される前に、この関数が呼び出されます。この関数で the type checking utilitiesを用いて、入力データの型を検証する必要があります。

Parameters: in_types (TypeInfoTuple) –  forward()のための入力データの型情報。

 

delete_hook(name)[source]

指定した関数フックを登録解除する。

 

Parameters: name (str) –登録解除する関数フックの名称

 

forward(inputs)[source]

入力配列に順伝播を適用する。

 

デフォルトで処理を forward_cpu() もしくは forward_gpu() へ委譲(丸投げ)します。入力配列の型によって、どちらの関数を選ぶか決定します。 Implementations of Function の実装は、CPU/GPU メソッドかこのメソッドのいずれかを実装しなければなりません。

 

Parameters: inputs –入力配列のタプル
Returns: 出力配列のタプル
Warning
 Function の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
forward_cpu(inputs)[source]

順伝播を CPU上で入力配列に適用します。

 

Parameters: inputs –  numpy.ndarray オブジェクトのタプル
Returns: numpy.ndarray オブジェクトのタプル
Return type: tuple
Warning

 Function の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。

forward_gpu(inputs)[source]

順伝播を GPU上で入力配列に適用します。

 

Parameters: inputs –  cupy.ndarray オブジェクトのタプル
Returns:  cupy.ndarray オブジェクトのタプル
Return type: tuple
Warning
 Function の実装は、戻り値が配列1個の場合にもタプルでなければいけないことに注意しておかなければなりません。
retain_inputs(indexes)[source]

データ配列を保持している入力Variableを指定する。

 

 forward()からこのメソッドを呼び出すことで、 この関数はどの入力が逆伝播に必要か指定することが出来ます。このメソッドが呼び出された場合、この関数は全ての入力配列を保全します。全ての入力配列を開放したいという場合は、このメソッドを空のシーケンスを渡して呼び出してください。

この挙動はFunctionNode.retain_inputs()とは異なりますので、注意してください。

 

このメソッドはforwardメソッドの外側から呼び出してはいけませんので、注意してください。

Parameters: indexes (iterable of int) – この関数が逆伝播のために必要としない入力Variableのインデクス。

 

retain_outputs(indexesretain_after_backward=False)[source]

データ配列を保全する出力Variableノードを指定する。

 

 forward()からこのメソッドを呼び出すことによって、このFunctionは、どの出力が逆伝播に必要か指定することが出来ます。 このメソッドが呼び出されない場合、 __call__()から戻るポイントで、どの出力Variableもデータ配列を保持するためのマークをされることはありません。保持された配列はoutput_dataに格納されます。

Note
Functionが逆伝播の際に、出力配列の一部もしくは全てを要求する場合、このメソッドを使うことが強く推奨されています。Functionは出力配列を自身への直接の参照を保持するだけで使用することが可能ですが、あとから出力VariableへこのFunctionを適用する際のパフォーマンスに影響するかもしれません。

このメソッドはforwardメソッドの外側から呼び出してはいけないので、注意してください。

 

Parameters:
  • indexes (iterable of int) – Functionが逆伝播に必要としない入力Variableのインデクス
  • retain_after_backward (bool) – このオプションは無効化です。後方互換を保つために残されています。

 

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