class chainer.FunctionAdapter(function)[source]

Functionを FunctionNodeでラップするAdapterクラス。

 

While FunctionNode は新しいスタイルの微分可能関数を提供しますが、今のところ旧スタイルの Function も後方互換性のために使用が可能です。

このクラスはそれらのインタフェースのアダプタを提供しています。このクラスは、委譲することによって、 FunctionNode インタフェースを Function オブジェクトに加えます。

Note
FunctionAdapter と Function の所有権はちょっとトリッキーです。初期化の際、 FunctionAdapter は Function オブジェクトによって所有されています。ひとたびこのFunctionがVariableに適用されると、所有権は入れ替わります。つまり、 このFunctionAdapterが Function オブジェクトの所有者となり、 この Function オブジェクトは参照を弱い参照に変更します。 
Parameters: function (Function) – ラップするFunction オブジェクト

 

Version 3.0.0の新機能です。

 

Methods

add_hook(hook, name=None)[source]

関数フックを登録します。

 

Parameters:
  • hook (FunctionHook) –登録したい関数フック
  • name (str) – 関数フックの名称。この名称はこの関数で登録された関数フック群においてユニークでなければなりません。Noneが指定された場合、関数フックのデフォルトが用いられます。

 

apply(inputs)[source]

出力変数を計算し計算グラフを発展させる。

基本的な動作はFunctionNodeのドキュメントに記載されています。

 

Note
入力Variableの data 属性 がGPU デバイス上にある場合、そのデバイスがカレントデバイスとされているので、 forward()を呼び出す前に,実装者はほとんどの場合、デバイス選択を気にする必要はありません。
Parameters: inputs – 入力Variableのタプル。各エレメントは以下のどれでも良い。 Variablenumpy.ndarray,  cupy.ndarray。このエレメントが 単体のndarrayだった場合、自動的に Variableでラップされる。
Returns: 出力 Variable オブジェクトのタプル。

 

backward(target_input_indexes, grad_outputs)[source]
backward_accumulate(target_input_indexes, grad_outputs, grad_inputs)[source]

特定の入力について勾配を計算し、それらを累算する。

 

このメソッドは複数のFunctionが同じVariableに対して適用された場合に、後方への計算と勾配の累算を融合する方法を提供します。

 

ユーザはこのメソッドか backward()をオーバーライドする必要があります。たいてい backward() を実装するほうがシンプルですし、効率的な勾配累算を提供する必要がない場合には、推奨されています。

 

Parameters:
  • target_input_indexes (tuple of int) – 勾配が求められている入力Variableのインデクス。少なくとも1つの要素を含むタプルが保証されています。 
  • grad_outputs (tuple of Variable) –出力Variableの勾配。出力Variableの勾配が与えられていない場合、相応する要素はNoneになります。
  • grad_inputs (tuple of Variable) –  target_input_indexesによって指示されている入力Variableの勾配。これらの値は他の計算経路で計算されています。もしVariableのための勾配値が存在しなかったら、相応する要素はNoneです。下記の注意(Note)もお読みください。
Returns:

特定の入力Variableに対する勾配を表すVariableのタプル  backward()と異なり、タプルの長さはtarget_input_indicesと同じでなければなりません。

Note
同じVariableがFunctionの複数の入力引数に渡される時、これらの入力引数に対応する最初の位置のgrad_inputだけが、入力Variableに対応する勾配変数を含むかもしれません。そして、他のエントリはNoneを設定されます。これは、このようなケースで、正確な勾配の累算の複雑化を避けるための実装詳細規定です。この動作は、将来のバージョンで変更される可能性があります。
check_type_forward(in_types)[source]
delete_hook(name)[source]

関数フックの登録を削除する。

 

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

 

forward(inputs)[source]
forward_cpu(inputs)[source]

入力されたNumPy配列から、出力配列を計算する。(*訳注:CPUで順伝播)

 

Parameters: inputs – 入力する numpy.ndarray オブジェクトのタプル.
Returns: 出力配列のタプル。各要素は NumPy もしくは CuPy 配列をとり得る。
Warning
FunctionNode の実装は戻り値が1つの場合であってもタプルでなければならないことに気をつけてください。
forward_gpu(inputs)[source]

入力した CuPy arraysから出力配列を計算する。(*訳注:GPUで順伝播)

 

Parameters: inputs –  cupy.ndarray オブジェクトのタプル。
Returns: 出力配列のタプル。各要素は NumPy もしくは CuPy 配列をとり得る。
Warning
FunctionNode の実装は戻り値が1つの場合であってもタプルでなければならないことに気をつけてください。
get_retained_inputs()[source]

保持されている入力Variableのタプルを返す。

 

このメソッドは forward()で保持されている入力Variableを取得するのに用いられます。

Returns: 保持されている入力Variableのタプル

 

get_retained_outputs()[source]

保持されている出力Variableのタプルを返す。

 

このメソッドは forward()で保持されている出力Variableを取得するのに用いられます。

Returns:

保持されている出力Variableのタプル

Note
このメソッドが呼び出される前にガベージコレクションされた出力ノードの場合、このメソッドではトリッキーなことをサポートしています。この場合、このメソッドは、FunctionNodeの出力ノードとして動作する新たなVariableNodeを生成しています。
retain_inputs(indexes)[source]

指定した入力VariableNodeにデータ配列を保持させる。

 

このメソッドを forward() から呼び出すことで、このFunctionNodeは逆伝播に必要な入力を明示することができます。この保持された配列を持つ入力Variablesは get_retained_inputs() によって backward()から取得することが可能です。

Functionとは異なり、このFunctionNodeは デフォルトでは入力配列を保持しません。もしいくつかの配列もしくは配列全てを保持したいなら、このメソッドを呼び出すことを忘れないでください。

 

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

Parameters: indexes (iterable of int) –Functionが逆伝播に必要としない入力Variableのインデクス
retain_outputs(indexes)[source]

指定した出力VariableNodeにデータ配列を保持させる。

 

このメソッドを forward() から呼び出すことで、このFunctionNodeは逆伝播に必要な出力を明示することができます。このメソッドが呼び出された場合、どの出力Variableもapply()から戻ったポイントのデータ配列を保持するためのマークをしません。保持された配列を持つ出力Variablesは  get_retained_outputs() によって backward()から取得可能です。

 

Note
逆伝播でいくつか、または全ての配列を要求する時、このメソッドを使用することが推奨されています。Functionは出力配列への参照を直接的に保持するだけで出力配列を用いることも可能ですが、あとから出力VariableへFunctionを適用する際のパフォーマンスに影響する可能性があります。

 

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

Parameters: indexes (iterable of int) – Functionが逆伝播に必要としない入力Variableのインデクス
unchain()[source]

入出力ノードとこのFunctionNode自身をグラフから消去する。

Attributes

function

このAdapterがラッピングしている Function オブジェクト

inputs = None
label
local_function_hooks

登録された関数フックの辞書を整理する。

chainer.thread_local.function_hooksと比べると、そちらはその要素を全てのFunctionに登録します。

このプロパティの関数フックは、このFunctionに特化されています。

output_data

保持している出力配列のタプル。

このプロパティは、主にFunctionによって用いられます。ユーザは基本的にこのプロパティを使用する必要はありません。かわりにget_retained_outputs()をご利用ください。

outputs = None
rank = 0
stack = None