chainer.
Link
(**params)[source]
モデル定義のブロック。 (*訳注:building block=積み木)
Linkは様々なパラメータ操作やネットワーク・フラグメント定義、直列化、etc.、といった様々な機能をサポートするニューラルネットワークモデルのブロックです。
Linkはモデル定義のためのプリミティブな構造体です。パラメータ変数や直列回組み込まなければならない永続値のマネジメントをサポートします。
ParameterはLinkに登録された Parameter
のインスタンスです。 Parameter
オブジェクトは初期化スコープ内で属性に割り当てることで、LinkのParameterとして登録することが可能です。初期化スポープロは init_scope()
コンテキスト・マネージャに囲われたwith
ステートメント使っているコードです。
永続値とは配列、スカラ、もしくは register_persistent()
か add_persistent()
を通して登録された直列化可能な値です。
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に登録する。
Parameter
オブジェクトを init_scope()
内で直接割り当てます。
例えば下記のコードの場合
link.add_param('W', shape=(5, 3))
次のように割り当てることで書き換え可能です。
with link.init_scope(): link.W = chainer.Parameter(None, (5, 3))
IDEs が属性の型を追跡するのは、後者のほうが簡単です。
Parameters: |
---|
add_persistent
(name, value)[source]¶
永続値にLinkを登録する。
登録された値は保存され、直列化(シリアル化)と直列化復元(デシリアル化)の際にロードされます。この値はLinkの属性に設定されます。
Parameters: |
|
---|
addgrads
(link)[source]¶
与えられたLinkから勾配値を累算する。
このメソッドは与えられたLinkの勾配配列を対応するLinkの勾配配列に加えます。この累算はホストやデバイスの違いを超えてなされます。
Parameters: | link (Link) – Source link object. |
---|
copy
()[source]¶
このLink階層を新しいものにコピーする。
このLinkの階層全体がコピーされます。
このコピーはParameter変数も浅くコピーされていることを除いても、基本的に浅いコピーです。
コピーされたParameter変数はオリジナルのLinkとは異なっていますが、データと勾配配列は共有しています。
Linkの名前はコピーではリセットされるので、コピーされたインスタンスは元の親へは(存在したとしても)繋がりません。
Returns: | コピーされたLinkオブジェクト |
---|---|
Return type: | Link |
copyparams
(link)[source]¶
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,))
links
(skipself=False)[source]¶
階層のもとでの全てのLinkのGeneratorを返す。
Parameters: |
skipself (bool)
– |
---|---|
Returns: | 全てのLinkを生成したGenerator オブジェクト |
namedlinks
(skipself=False)[source]¶
階層下の全ての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]¶
to_gpu
(device=None)[source]¶
Parameters: | device – Target device specifier. If omitted, the current device is used. |
---|---|
Return: | self |
Return: self
zerograds
()[source]¶
全ての勾配配列を0で初期化する。
このメソッドはcleargradsと同じ目的で使用できますが、非効率になります。
このメソッドは後方互換性のために残されています。
cleargrads()
をお使いください。
Attributes
update_enabled
¶
True
。
within_init_scope
¶
現在のコードが初期化スコープの内側であるときTrue
。
初期化スコープの詳細はinit_scope()
をご覧ください。