class chainer.variable.VariableNode(variable, name, **kwargs)[source]

バックワード計算グラフでVariableを表しているノード。

 

このオブジェクトは計算グラフにおけるVariableノードを表しています。このノードは、誤差逆伝播(=バックプロパゲーション)で各Functionが通過する勾配を決定します。

1つのVariable nodeは、それに対応するVariable オブジェクトに保持されていて、ユーザによって管理されます。InputとしてVariableをとるFunction オブジェクト もVariableノードへの参照を保持しています。 

 

このノードは対応する一般的なデータ配列への参照を保持するものではありませんので注意してください。データ配列は下記のような場合、ノードからアクセス可能です。

  1. ノードへの参照を保持するVariable オブジェクトが存在している場合や、 VariableノードがVariableオブジェクトへの弱い参照を保持している場合で、データ配列がその弱い参照を通してデータ配列へアクセス可能な場合。
  2.  retain_data() 呼び出された時、このノードがデータ配列への参照を保持していた場合。これは、主に逆伝播の処理中に入出力データを必要とするFunctionが呼び出された時になります。詳細は Function.retain_inputs() と Function.retain_outputs() をお読みください。

ユーザは、通常VariableNodeオブジェクトに触れる必要はありません。Chainerによって計算グラフは自動的に管理され、ユーザにとって有益なインタフェースはVariableによって提供されています。

Parameters:
  • variable (Variable) – このノードに対応するVariable オブジェクト
  • name (str) – Variable ノードの名前
Variables:
  • dtype – データ配列の型
  • shape – データ配列の各次元の長さ
  • name (str) – Variable ノードの名前

 

Methods

get_variable()[source]

対応する Variable オブジェクトを返す。

 

VariableNode オブジェクトはVariable オブジェクトへの弱い参照を持ちます。この参照が生きているとき、プロパティを返します。そうでなければこのプロパティがノードオブジェクトから新しいVariableオブジェクトを作成して返します。

Returns:

ノードから参照されているVariable オブジェクト 

Return type: Variable
retain_data()[source]

ノードに元になるデータ配列への参照を持たせる。

 

このメソッドは対応するVariableからデータ配列を取得して保持します。対応するVariableへの弱い参照が死んだとき、エラーを発生させます。

set_creator(creator)[source]

このノードを生成した Functionオブジェクトをセットする。

 

このメソッドは self.creator = creator を設定することと同じです。. A FunctionNodeオブジェクトも渡すことができます。

Parameters: creator (Function or FunctionNode) – Function that has created this variable.
set_creator_node(creator_node)[source]

このノードを生成した FunctionNodeオブジェクトをセットする。

 

このメソッドは self.creator_node = creator_node を設定することと同じです。.ノードオブジェクトが設定されている場合は、Function オブジェクトを渡すことが可能です。

Parameters: creator_node (FunctionNode or Function) – Function node that has this variable as an output.
unchain()[source]

Deletes the reference to the creator of this このVariableノードのcreatorへの参照を削除します。

このメソッドは self.creator_node = Noneを設定することと同じです。

Attributes

creator

このVariable nodeを生成したFunctionオブジェクト。

 

Functionが旧スタイルのAPIによって実装されているとき(つまり Function  クラスが用いられるとき)、このプロパティは、その Function オブジェクトを返します。このオブジェクトがFunctionAdapter オブジェクトから抽出されるとき、返されたオブジェクトは FunctionNode  ではなく、代わりに逆伝播と順伝播の実際の実装になります。

 

Functionが新しいスタイルのAPIによって実装されているとき(つまりFunctionNode クラスが用いられるとき)、このプロパティはFunctionNodeオブジェクトを返します、この場合、返されるオブジェクトはcreator_nodeと同様です。

Warning
v3.0.0以降では、creatorが旧スタイルのFunctionである場合、下記のコードは無効です。
creator = v.creator
v.creator = None
...
v.creator = creator

 

大事なのは、 FunctionNode  オブジェクトは計算グラフでFunctionの代わりにノードとして用いられるということで、各 Function オブジェクトはそれに対応するFunctionNode に弱い参照を保持しているだけだということです。creatorは Functionオブジェクトを返すので、保存しているcreaterでFunctionNode  オブジェクトは保持されません。

creator_node = v.creator_node 
v.creator_node = None
...
v.creator_node = creator_node
creator_node

出力としてVariableを持つFunction ノード

FunctionNode について詳しくは、リンク先の定義をお読みください

data

対応するVariableのデータ配列。

このデータが利用可能でない場合、 Noneを返す。

grad

対応するVariableの勾配配列。

この変数が利用可能でない場合は、 Noneを返す。

grad_var

対応するVariableの勾配変数

対応するVariable が利用可能ではない場合 Noneを返す。

label

Variable ノードを 表す短いテキスト(ラベル)。

rank
requires_grad

逆方向への計算にgradをセットするかどうか指示する。