LoginSignup
5
5

More than 5 years have passed since last update.

Chainerを用いた簡単なニューラルネットワーク実装〜モデルの記述編〜

Posted at

前回から深層学習のフレームワークであるChainerを使って実際にニューラルネットワークを構築する記事を書いています.
今回は
1.データの準備
2.モデルの記述
3.最適化アルゴリズムの設定
4.学習
5.結果の出力
のうち

2.モデルの記述

について書いていきます.

構築するニューラルネットワーク

前回書いた通り,今回使用するIrisデータは入力が4次元で,その出力が3次元です.
ものすごく単純に考えたら,そのネットワークは以下の図のように構築できます.

Irisのネットワーク_1.png

しかし,構築すべきなのは中間層を持ったニューラルネットワークです.入力と出力の間に層が必要です.
事例を単純にして,中間層を1つ追加します.ノードの数は6つとします.

すると,ネットワークは以下の図のようになります.
Irisニューラルネットワーク_2.png

またまたしかし,Chainerの基本オブジェクトについて〜links編〜で書いたように,l層からl+1層への写像は

y = wx + b

という線形で表します.つまり,入力層,中間層にそれぞれバイアスbが必要です.
それを考慮した図が以下のものです.

Irisニューラルネットワーク_3.png

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の実装方法~ オーム社

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5