import chainerimport chainer,chainer.functions as F, numpy as np
W = chainer.Variable(np.array(...))
b = chainer.Variable(np.array(...))
x = np.array(...)
y = np.array(...)
a = F.matmul(W, x)
y_hat = a + b
ell = F.mean_squared_error(y, y_hat)
print(ell.data) # => ロス値を出力
例:線形回帰
26
matmul + MSE
入力の準備(あとで grad を取り出
す場合はあらかじめ Variable にし
ておく)
順伝播の計算
27.
例:線形回帰
27
matmul + MSE
a= F.matmul(W, x)
y_hat = a + b
ell = F.mean_squared_error(y, y_hat)
ell.backward() # ロスの勾配を計算
print(W.grad) # => W に対する勾配を出力
print(b.grad) # => b に対する勾配を出力
28.
ニューラルネットのコンポーネント化: Link/Chain/ChainList
Link:順伝播のコード片と、それに紐づくパラメータをまとめたもの
– ニューラルネットのオブジェクト指向プログラミング
Chain, ChainList: 順伝播のコード片と、そこで使われる Link をまとめたもの
– コンポーネントを階層化するもの
– これら自身も Link なので、入れ子にできる
– 子 Link を名前で管理するのが Chain, インデックス番号で管理するのが ChainList
これらには、ニューラルネットを扱う上での便利な機能もついている
Link 階層内のすべてのパラメータを集めてくる
Serializer を使ったパラメータのセーブ・ロード (npz, HDF5 に対応)
階層内のすべての Link を指定した GPU のメモリに送る
28
例:多層パーセプトロン
30
import chainer, chainer.functionsas F, chainer.links as L
import numpy as np
class MLP(chainer.Chain):
def __init__(self):
super().__init__(
l1=L.Linear(100, 10),
l2=L.Linear(10, 1),
)
def __call__(self, x):
h = F.tanh(self.l1(x))
return self.l2(h)
Wx+b
Linear
Linear
MLP
tanh Linear