前回から深層学習のフレームワークであるChainerを使って実際にニューラルネットワークを構築する記事を書いています.
今回は
1.データの準備
2.モデルの記述
3.最適化アルゴリズムの設定
4.学習
5.結果の出力
のうち
2.モデルの記述
について書いていきます.
#構築するニューラルネットワーク
前回書いた通り,今回使用するIrisデータは入力が4次元で,その出力が3次元です.
ものすごく単純に考えたら,そのネットワークは以下の図のように構築できます.
しかし,構築すべきなのは中間層を持ったニューラルネットワークです.入力と出力の間に層が必要です.
事例を単純にして,中間層を1つ追加します.ノードの数は6つとします.
またまたしかし,Chainerの基本オブジェクトについて〜links編〜で書いたように,l層からl+1層への写像は
y = wx + b
という線形で表します.つまり,入力層,中間層にそれぞれバイアスbが必要です.
それを考慮した図が以下のものです.
#Irisモデル
では,Chainオブジェクトを用いてIrisのニューラルネットワークモデルを表現します.
class IrisChain(Chain):
def __init__():
super(IrisChain, self).__init__(
l1 = L.Linear(4, 6),
l2 = L.Linear(6, 3),
)
def __call__(self, x, y):
return F.mean_squared_error(self.fwd(x), y)
def fwd(self, x):
h1 = F.sigmoid(self.l1(x))
h2 = self.l2(h1)
return h2
詳しい説明はこちらの記事を参照してください.
入力層:4
中間層:6
出力層:3
なので,
4 → 6を
l1 = L.Linear(4, 6)
6 → 3を
l2 = L.Linear(6, 4)
と表現しています.
今回はここまでです.
次回はこのモデルで求まった誤差の最小値を求める最適化について書きます.
#参考
山下隆義
イラストでわかるディープラーニング 講談社
新納浩幸
Chainerによる実践深層学習~複雑なNNの実装方法~ オーム社