class chainer.Variable(data=None, *, name=None, grad=None, requires_grad=True) [source]

 

演算結果を追跡するための構造体の配列です。

 

全てのVariableはnumpy.ndarray 型、または cupy.ndarray型のデータ配列を持ちます。

 

Variable オブジェクトは、データ配列と計算グラフのVariableNode オブジェクトを持ちます。Variableがユーザによってコンストラクトされた場合、そのノードはルートであり、親を持ちません。 Variable が FunctionNode オブジェクトによってコンストラクトされた場合、ノードは creator_nodeと呼ばれる親への参照を持ちます。この参照は、グラフをバックプロパゲーション(誤差逆伝播法)においてバックトラックする際に用いられます。

 

ユーザは、この連鎖的な挙動をno_backprop_mode()によって無効(もしくはforce_backprop_mode()によって有効)にすることができます。Variableが計算グラフを生成させないことはもとより、強制的に生成することも可能です。

 

Warning
volatile変数はv2以降、サポートされていません。代わりに, chainer.no_backprop_mode()を使用してください。
Parameters:
  • data (numpy.ndarray or cupy.ndarray) – 初期データ配列
  • name (str) – このvariableの名前
  • grad (numpy.ndarray or cupy.ndarray) – 初期勾配配列
  • requires_grad (bool) – バックワード計算のときに勾配をセットするかどうかを指示するBoolean。

 

Methods

__getitem__(x, slices)[source]

指定した形、軸、オフセットで配列から要素を抽出(スライス)します。

変数:
  • x (Variable) – スライスされるVariable
  • slices (int, slice, Ellipsis, None, integer array-like, boolean array-like or tuple of them) – 整数、スライス、省略記号、numpy.newaxis, 配列型の整数、配列型のboolean、または、それらのタプル。
戻り値:

xからスライスされた配列を含む Variableオブジェクト

Note
整数配列がスライスに含まれている場合、CUDAのadmicAddによってサポートされた型のみサポートします。 サポートされている型は numpy.float32numpy.int32numpy.uint32numpy.uint64numpy.ulonglongです。
Note
複数のboolean配列が含まれるスライスはサポートしません。
Note
indexingの詳細は、Numpyドキュメントをお読みください。
__len__()[source]

データ配列の1次元目を返す

戻り値: データ配列の1次元目のデータ数
Return type: int
__copy__()[source]
 
addgrad(var)[source]

与えられた元のVariableを加えて、勾配配列を蓄積する。

このメソッドは与えられた変数の勾配をこの変数の勾配に加えます。この累算はホストとデバイスの区別なく行われます。 この変数が、初期化されていないデータ配列もしくは勾配配列だった場合、 このメソッドは与えられた変数の型で初期化し、勾配を累算します。

 

変数:

var (Variable) – 元のVariable.

 

backward(retain_grad=False, enable_double_backprop=False)[source]

誤差逆伝播の処理を走らせます。

 

逆伝播の際、FunctionNode.backward()はこのVariableからスタートするバックワードグラフに現れる、それぞれのFunctionNodeオブジェクトから呼び出されます。 バックワードグラフは後方への参照を示すもので、Variableノードからそのcreatorへ、Functionノードからそれらの入力Variableノードへの参照を示しています。 逆伝播は全て ルート・ノードで停止します。 Functionノードにはいくつかの入力の勾配としてNoneを設定するものがあります。そのような入力の場合、さらなる逆伝播は行われません。

 

このメソッドは、初期誤差配列の初期値としてgradを使用します。 ユーザは、このメソッドを呼び出す前に、手動で勾配配列を設定出来ます。 dataが1要素のみを含む(つまりスカラである)場合、gradNoneであり、このメソッドは自動的に誤差配列の初期値として1.0を補完します。 これは、スカラ損失値から逆伝播をスタートするときに役立ちます。

 

このメソッドは微分可能な逆伝播をサポートしませんのでご注意ください。勾配の勾配を計算する場合は、grad()をご利用ください。

 

Parameters:
  • retain_grad (bool) –

    この値がTrueの場合、全ての中間変数の勾配配列が保持されます。それ以外では、中間変数のgradは、適切なタイミングでNoneにセットされます。 これで、最大メモリ消費量が減る可能性があります。 学習モデルのほとんどのケースで、逆伝播の目的はすべての変数ではなく、パラメータの勾配計算にあります。そのため、このフラグにはFalseをセットすることを推奨しています。

  • enable_double_backprop (bool) – (v3.0で追加) この値がTrueの場合、バックプロパゲーション処理の全体の計算トレースが計算グラフに記録されるため、勾配計算の結果からさらにバックプロパゲーションを行うことが出来ます。 ただし、この処理を有効にすると、2番めの勾配計算に必要な中間変数について勾配を格納する必要があるため、メモリ消費量が拡大します。
cleargrad()[source]

勾配配列をクリアします。

copydata(var)[source]

与えられたVariableの元データからデータ配列をコピーします。

このメソッドは引数で与えられたデータ配列を現在のVariableオブジェクト自身へコピーする。 このコピーは異なるデバイス間に(ホストを超えて、もしくはGPU上に)存在する配列の場合でもなされます。 このVariableが初期化されていないデータ配列を持っている場合、このメソッドは与えられたvariableのデータ配列でそれを初期化します。 同様に、もし引数で与えられたVariableが初期化されていないデータ配列を持つ時、このメソッドは現在のVariableオブジェクト自身(self)で、そのデータ配列を初期化します。 また、両方とも初期化されていない場合、このメソッドは何も行いません。

 

Parameters: var (Variable) – コピー元になるデータ

 

debug_print()[source]

Variableのポジションと格納されたデータの概要を表示します。

 

reshape(*shape)[source]

 

Variableの内容を変えずに型を変えて返す。リシェイプ。

 

See also
ドキュメント全文は、chainer.functions.reshape() をご覧ください。

 

retain_data()[source]

対応するvariable ノードに元になる配列を保持させます。

 

set_creator(gen_func)[source]

現在のVariableに与えられたFunctionが自身のcreatorであることを通知します。

Parameters: gen_func (Function) – 現在のVariable自身を出力として生成したFunction オブジェクト

 

set_creator_node(fnode)[source]

与えられたノードが自身のcreatorであるということをVariableに通知します。

Parameters: fnode (FunctionNode) –現在ののVariable自身を出力として持つFunctionNode

 

summary()[source]
 
to_cpu()[source]

データと勾配配列をCPUへコピーします。

to_gpu(device=None)[source]

データと勾配配列を指定したGPUへコピーします。

Parameters:

device – ターゲットデバイス指示子。省略された場合、現在のデバイスが使用されます。

 

transpose(*axes)[source]

コピーせずに指定された次元のデータを変換する。

See also
chainer.functions.transpose() を御覧ください。
unchain()[source]

このVariable自身のcreattorへの参照を削除します。

このメソッドは対応するVariableノードからのcreatorへの参照を削除します。unchain_backward()とは異なり、グラフを逆方向へは探索しません。

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

 

unchain_backward()[source]

Variable ノードと逆方向への functionsの間の参照を削除します。

このメソッドが完了したあと、どこからも参照されていない中間変数ノードとFunctionは参照をカウントしているGC(ガベッジコレクション)によって割当を解除されます。

このVariable自身も、ノードからcreatorであるFunctionへの参照を削除します。つまり、ノードは計算グラフのルートになります。これは、アンチェインしたあとにこのVariableで逆伝播が停止するということを示しています。この挙動は truncated BPTTの実装で有用です。

 

zerograd()[source]

0で勾配配列を初期化します。

勾配変数はこのメソッドによって計算グラフから開放されます、この操作が逆伝播の有効性を破壊するからです。

 

version v1.15以降で、非推奨
代替としてcleargrad()をお使いください 。
__eq__(other)[source]
 
__ne__(other)[source]
 
__lt__(other)[source]
 
__le__(other)[source]
 
__gt__(other)[source]
 
__ge__(other)[source]
 
__nonzero__()[source]
 
__bool__()[source]
 

Attributes / 属性

T

このVariable(多次元配列)の転置

array

元になるデータ配列。

numpy.ndarray 、 cupy.ndarray、もしくはVariableが初期化されていない状態の場合はNone

creator

このVariableを生成したFunction 実装。

この variable が旧スタイルのFunctionによって生成されている場合(つまり、Functionのサブクラスとして実装されている場合)、このプロパティはFunction オブジェクトを返します。

この variable が新しいスタイルのFunctionによって生成されている場合 (つまり FunctionNode クラスのサブクラスとして実装されている場合)、このプロパティはnode オブジェクトを返します。

creator_node

現在のVariableを生成したFunctionNode オブジェクト。

このプロパティはNoneを設定できる setterを持ちます。このプロパティにNoneを設定することは、 unchain()を呼び出すことと同じです。すなわち、Vatiableを、自信を生成したFunctionから開放します。

この setterは FunctionNode オブジェクトもこのVariable自信を生成したものとして受け入れます。例えば、まずNoneをこのプロパティにセットして、次に独自の値をセットするということが可能です。 

Note
無関係の FunctionNode() オブジェクトを設定することで、すぐにはエラーは発生しませんが、 このような動作は定義されていません。現在のVariableを生成していない FunctionNode() オブジェクトをこの属性に設定しないでください。
data

元になるデータ配列 ( array  と同じもの).

この属性を直接使用することは止められています。かわりに array をお使いください。.arrayを使用することで、 Variable と ndarrayをコード中で混ぜて書くとき、エラーを早期に発見できるでしょう。なぜなら、 ndarray は.data属性を持ちますが、.arrayを持たないからです。 

dtype
 
grad

現在のVariableの勾配配列。

このプロパティは勾配変数自身の代わりに、勾配変数のもとになる配列を返しますので注意してください。勾配変数を取得したり設定するためには、grad_var を使用してください。

grad_var

勾配変数(variable)

label

この variableを表す短いテキスト(ラベル)

name
 
ndim
 
node
 
rank
 
requires_grad

この属性は、 逆方向への計算を行う際にgradをセットするかどうかを示しています。

 
size