Chainerでニューラルネットワーク及び畳み込みニューラルネットワークを実装してみた

追記 2017-06-20

こちらの方が実装が新しいです。

Chainerでニューラルネットワーク、RNN、CNNを実装してみた
RNNの実装の勉強もしました。今回は整理と備忘録も込めて、Chainerでニューラルネットワーク、リカレントニューラルネットワーク、畳み込みニューラルネットワークの実装について記します。ニューラルネットワーク(Neural network; NN)順伝播型のニューラルネット...

明けました。

本年もどうぞ、よろしくお願いいたします。

機械学習系のライブラリは去年から何かしら使ってみたいなーと思っていました。

今回、Chainerを触ってみまして、MNISTの画像認識アルゴリズムを、ニューラルネットワークと畳み込みニューラルネットワークで実装してみました。

ちなみに、他にもTensorFlowも使ってみたのですが、自分としてはひとまずChainerの方がコード感覚としてしっくりきましたので、こちらを使ってみました。

Chainer

Chainerはニューラルネットワークを実装するためのライブラリです。

Chainer : http://chainer.org/

コーディングが直感的でかつ柔軟性があり、基本的なニューラルネットワークやディープラーニングの他にも、リカレントニューラルネットワークや畳み込みニューラルネットワークなど、様々なタイプのニューラルネットワークを実装することができます。

ただし、柔軟である分、ある程度、ニューラルネットワークの知識が求められる部分があるのかなーと思います。

ちなみにインストールが超楽チンです。

ニューラルネットワークの実装

今回はMNIST画像を分類するモデルをニューラルネットワークで作ってみます。

有名な問題なので、説明はほぼ省略しますが、手書きの数字の画像を画像認識して何の数字が書かれているかを予測する問題です。

画像サイズは28ピクセルで、グレースケールですので、そのまま1次元配列化して、入力層数を28*28=784とします。

これを0〜9の数字を予測しますので、出力層数は10とします。

Pythonで書いたコードが以下になります。

交差検証により、学習用の教師ラベル付きデータを60000件、学習したモデルの予測率をテストするデータを10000件として、学習・予測をさせた結果、正解率97.78%となりました。

畳み込みニューラルネットワークの実装

次に畳み込みニューラルネットワークで解いてみます。

畳み込みの場合は、問題の場合に応じて、フィルター、パディング、ストライドといった畳み込みニューラルネットワーク特有の設定値に基づいて入力数を設定します。

今回はフィルターは5ピクセル、パディングとストライドは初期値のままで実装しました。

今回はコーディング感覚について勉強しておきたかったため、さすがにこの問題例では精度が飛躍的に上がるというわけではないですが(元々良いですし)、若干精度向上しました。

以上、ニューラルネットワークと畳み込みニューラルネットワークをChainerで実装しました。

今回はやりませんでしたが、個人的には、リカレントニューラルネットワークも今度やってみたいなーと思っています。

時系列データか自然言語処理に適用してみたいですね。


追記

リカレントニューラルネットワークのChainer実装を行ったので、更新しました。

ニューラルネットワーク、畳み込みニューラルネットワークも一緒に書いています。

Chainerでニューラルネットワーク、RNN、CNNを実装してみた
RNNの実装の勉強もしました。今回は整理と備忘録も込めて、Chainerでニューラルネットワーク、リカレントニューラルネットワーク、畳み込みニューラルネットワークの実装について記します。ニューラルネットワーク(Neural network; NN)順伝播型のニューラルネット...
 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です