Chainer
始める
関数の種類
パラメータを持つ関数
NNの層を表す
chainer.links以下にある
パラメータを持たない関数
など
chainer.functions以下にある
Sequentialでネットワークを定義
code:py
import chainer.links as L
import chainer.functions as F
from chainer import Sequential
net = Sequential(
L.Linear(4, 10), # Linear(入力次元,出力次元)
F.relu,
L.Linear(10, 10), # ←隠れ層
F.relu,
L.Linear(10, 2) # ←出力層
)
基本的なオブジェクトについて
chainer.Variable
code:py
v = Variable(np.array(1, dtype=np.float32)) # node宣言 v.data # 中身を確認
v.backward() # 逆伝搬を実行. 前のノードの.gradに微分値が入る
参考
chainer.Function
Variableオブジェクトを引数に取る関数を提供する
code:py
from chainer import Function as F
F.sin(x).data
参考
chainer.links
層から層への写像を提供する
というよりも、「一層一層を表すオブジェクト」って言ったほうがわかりやすくない?
Variableオブジェクトを引数に取る関数を提供する
Functionと異なりパラメータを持つオブジェクト
code:py
from chainer import links as L
l = L.Linear(3, 4) # 3次元から4次元へのアフィン変換. 内部的に(y=Wx+b)のWとbのパラメータを保持する
l.W.data
l.b.data
y = l(x) # lは関数として使える
l.zerograds() # 勾配をゼロに初期化する
参考
chainer.Chain
Functionやlinksで提供される関数を合成してパラメータの推定をする
Chainにlinksを追加してモデルを作っていく
これ作られてできたモデルはどんなフォーマットになってるんだろうかmrsekut.icon
code:py
class Chain(Chain): # chainer.Chainを継承して使う
def __init__(self):
super(MyClass, self).__init__(
l1 = L.linear(4, 3),
l2 = L.linear(3, 3)
)
def forward(self, x):
return F.sigmoid(self.li1(x))
def __call__(self, x, y):
result = self.forward(x)
loss = F.mean_squared_error(result, y)
return loss
参考