chainer.Link

class chainer.Link(**params)[source]

 

モデル定義のブロック。 (*訳注:building block=積み木)

 

Linkは様々なパラメータ操作やネットワーク・フラグメント定義、直列化、etc.、といった様々な機能をサポートするニューラルネットワークモデルのブロックです。

Linkはモデル定義のためのプリミティブな構造体です。パラメータ変数や直列回組み込まなければならない永続値のマネジメントをサポートします。

 

ParameterはLinkに登録された Parameter のインスタンスです。 Parameter オブジェクトは初期化スコープ内で属性に割り当てることで、LinkのParameterとして登録することが可能です。初期化スポープロは init_scope() コンテキスト・マネージャに囲われたwith ステートメント使っているコードです。

 

永続値とは配列、スカラ、もしくは register_persistent() か add_persistent()を通して登録された直列化可能な値です。

Note
任意の直列化可能なオブジェクトを永続値として登録することができますが、学習の結果として扱われるはずの値を登録することが強く推奨されています。典型的な永続値の例は、訓練中に計算したものやテストで要求されたもの、例えばバッチ正規化のための統計の実行です。

 

Parameterと永続値は名前によって参照されます。名前は、Linkの属性としてアクセスされます。Link クラス自体はParameterの名前のリストやParameterを区別するための永続値、他の属性の永続値を管理します。 

 

Link はさらに複雑なモデルを構成可能です。この構造特徴は Chain や ChainList のような子クラスによってサポートされています。これは他のLinkと結合することによってチェーン(連鎖)をつくりだします。子クラスの詳細はそれぞれのドキュメントをお読みください。

 

上述したように、 Linkは  Serializer クラスの直列化プロトコルをサポートしています。 Parameterと永続値だけが保存されロードされるということに留意してください。 他の属性はユーザプログラムの一部(例えば、ネットワーク定義の一部)とみなされます。保存されているファイルからLinkを構成する場合、他の属性はユーザのコードによって同様に最構成されなければなりません。

 

Example

これはカスタムLink定義の簡単な例です。

 

Chainer 自身もlinks モジュール下で定義された多くのLinkを提供してきました。それらも例として役立つかもしれません。

 

linear() 関数に基いて、全結合層を実装する、シンプルでプリミティブなLinkを定義したい場合を考えます。この関数は入力ユニット、加重(Variable)、バイアス(Variable)を引数としてとることに留意してください。そうすると、全結合層 は下記のように定義することが出来ます。

 

import chainer

import chainer.functions as F from chainer

import initializers import numpy as np class

 

LinearLayer(chainer.Link):

 

def __init__(self, n_in, n_out):

super(LinearLayer, self).__init__()

with self.init_scope():

    self.W = chainer.Parameter( initializers.Normal(), (n_out, n_in))

    self.b = chainer.Parameter( initializers.Zero(), (n_out,))

 

def __call__(self, x):

return F.linear(x, self.W, self.b)

 

この例は、ユーザが任意のパラメータを定義出来、どのメソッドからもそれを利用出来ることを示しています。 Linkは一般的に __call__ オペレータを実装していますが、順伝播を実装する他のメソッドも提供しています。

Parameters: params(deprecated since v2.0.0) 名前、形(shape)、初期パラメータのオプショナルデータタイプ(dtype)。キーワードはパラメータ名として用いられ、これに対応する値はshapeかshapeのタプルとdtypeで構成される (shape, dtype)。このshapeだけが与えられた場合、デフォルトのdtypeが用いられる。
Variables: name (str) – 親Chainが存在している場合、そこから与えられた、このLinkの名前

Methods

add_param(name, shape=None, dtype=<type 'numpy.float32'>, initializer=None)[source]

Parameter をLinkに登録する。

 

 version v2.0.0以降、非推奨:

Parameter オブジェクトを init_scope() 内で直接割り当てます。

 

例えば下記のコードの場合

link.add_param('W', shape=(5, 3))

 

次のように割り当てることで書き換え可能です。

with link.init_scope():
    link.W = chainer.Parameter(None, (5, 3))

 

IDEs が属性の型を追跡するのは、後者のほうが簡単です。

Parameters:
  • name (str) – パラメータの名前。この名前は属性名としても用いられる。 
  • shape (int or tuple of ints) – パラメータ配列のShape。省略されている場合、パラメータ変数は初期化されないままです
  • dtype – パラメータ配列のデータ型
  • initializer –  Noneが設定されていない場合、データは与えられた初期化子で初期化されます。初期化子が配列だった場合、データは直接その配列で初期化されます。 呼び出し可能な場合は、重みの初期化子とshちえ用いられます。これらのケースでは、 dtype 引数は、無視されますので注意してください。
add_persistent(name, value)[source]

永続値にLinkを登録する。

 

登録された値は保存され、直列化(シリアル化)と直列化復元(デシリアル化)の際にロードされます。この値はLinkの属性に設定されます。

Parameters:
  • name (str) – 永続値の名前。この名前は属性名にも用いられる。
  • value – 登録される値。

 

addgrads(link)[source]

与えられたLinkから勾配値を累算する。

 

このメソッドは与えられたLinkの勾配配列を対応するLinkの勾配配列に加えます。この累算はホストやデバイスの違いを超えてなされます。

Parameters: link (Link) – Source link object.

 

children()[source]

全ての子Linkのgeneratorを返す。

 

Returns: 全ての子Linkを生成した、Generator オブジェクト 

 

cleargrads()[source]

全ての勾配配列をクリアする。

 

このメソッドは最適化を繰り返す度に、逆方向への計算の前に呼び出されるはずです。

copy()[source]

このLink階層を新しいものにコピーする。


このLinkの階層全体がコピーされます。
このコピーはParameter変数も浅くコピーされていることを除いても、基本的に浅いコピーです。
コピーされたParameter変数はオリジナルのLinkとは異なっていますが、データと勾配配列は共有しています。
Linkの名前はコピーではリセットされるので、コピーされたインスタンスは元の親へは(存在したとしても)繋がりません。

 

Returns: コピーされたLinkオブジェクト
Return type: Link

 

copyparams(link)[source]
与えられたLinkから全てのパラメータをコピーする。

このメソッドは改装中にある全てのパラメータのデータ配列をコピーします。
このコピーはホストとデバイスの違いを超えてなされます。
このメソッドが購買配列をコピーしないということに留意してください。

 

Parameters: link (Link) – Source link object.

 

disable_update()[source]

Link階層のもとの全てのParameterの更新ルールを無効にする。

 

このメソッドは各Parameter変数の更新ルールの enabled フラグを  Falseに設定します。

enable_update()[source]

Link階層のもとの全てのParameterの更新ルールを有効にする。

このメソッドは各Parameter変数の更新ルールの enabled フラグを Trueに設定します。

init_scope(*args, **kwds)[source]

初期化スコープを生成する。

 

このメソッドは、割当によるParameter(とChainのLink)の登録を可能にするコンテキスト・マネージャオブジェクトを返します。 Parameter オブジェクトを、このコンテキスト・マネージャのもとにある属性に割り当てらることによって、自動的に登録することが可能です。

 

Example

殆どの場合、Parameter登録はinitializer メソッドによって行われます。. init_scope メソッドを用い、 Parameter オブジェクトを登録するLinkへ、簡単に割り当てることができます。


class
MyLink(chainer.Link):
def __init__(self):
super().__init__()
with self.init_scope():
self.W = chainer.Parameter(0, (10, 5))
self.b = chainer.Parameter(0, (5,))

階層のもとでの全てのLinkのGeneratorを返す。

 

Parameters:

skipself (bool) –  True,が設定されている場合、GeneratorはこのLinkをスキップし最初の子Linkからはじめる。

Returns: 全てのLinkを生成したGenerator オブジェクト

 

 

階層下の全てのpathとLinkのペアのGeneratorを返す。

 

Parameters: skipself (bool) –  Trueが設定されている場合、GeneratorはこのLinkをスキップし最初の子Linkからはじめる。
Returns: 全てのpathとLinkのペアを生成したGenerator オブジェクト

 

namedparams(include_uninit=True)[source]

階層下の全てのpathとparamのペアのGeneratorを返す。

 

Parameters: include_uninit (bool) – True,が設定されている場合、初期化されていないParameterも生成する。
Returns: 全てのpathとparamのペアを生成したGenerator オブジェクト。このpathはこのLinkの申請。

 

params(include_uninit=True)[source]

Link階層下のすべてのParameterのGeneratorを返す。

 

Parameters: include_uninit (bool) – True,が設定されている場合、初期化されていないParameterも生成する。
Returns: 全てのParameterを生成したGeneratorオブジェクト

 

register_persistent(name)[source]

与えられた名前の属性を永続値として登録する。

 

これは、永続値として存在している属性を快適に登録するメソッドです。 name が既にParameterとして登録されている場合、このメソッドはそれをParameter名のリストから削除し、永続値として再登録します。

Parameters: name (str) – 登録されている属性の名前

 

serialize(serializer)[source]

Linkオブジェクトのシリアライザ

 

Parameters: serializer (AbstractSerializer) – Serializer object.
to_cpu()[source]
Parameter変数と永続値をCPUにコピーする。

このメソッドは登録されていない属性を取り扱いません。
登録されていない属性をCPUにコピーしなければいけない場合、Link実装はこのメソッドをそ扱えるようにオーバーライトしなければなりません。

Return:self
to_gpu(device=None)[source]
Parameter変数と永続値をGPUにコピーする。

このメソッドは登録されていない属性を取り扱いません。
登録されていない属性をGPUにコピーしなければいけない場合、Link実装はこのメソッドを扱えるようにオーバーライトしなければなりません。
Parameters: device – Target device specifier. If omitted, the current device is used.
Return: self

Return: self

zerograds()[source]

全ての勾配配列を0で初期化する。

このメソッドはcleargradsと同じ目的で使用できますが、非効率になります。
このメソッドは後方互換性のために残されています。

v1.15以降では非推奨:
かわりにcleargrads()をお使いください。

Attributes

update_enabled
少なくとも1つのパラメータが有効な更新ルールを持つ時、True 。
within_init_scope

現在のコードが初期化スコープの内側であるときTrue 。

初期化スコープの詳細はinit_scope() をご覧ください。

xp

このLinkへの配列モジュール。

 

CPUとGPUどちらのLinkがオンになっているかによって、 プロパティは numpy か cupyを返す。