【Chainer】手書き数字認識をしてみた【Deep Learning】

Chainerを用いて、ニューラルネットワークを構築し、手書き数字認識を行ったときのメモです。

Chainerとは、日本の会社が開発しているオープンソースの深層学習フレームワークです。

手書き数字データには、MNISTを用いています。
今回は、画像認識なのですが、CNNではなく通常のニューラルネットワークを構築しています。

実装環境は、GPU環境を無料で使える Google Colaboratory で行っています。
https://colab.research.google.com/
※Googleアカウントでのログインが必要となります。

Google Colaboratory については、以前にまとめてあるので、よかったら参考にしてみてください。
【Google Colaboratory】クラウド上でPythonを使って機械学習を行う。

GPUを使用するには、新規のノートブックを作成後、「編集」→「ノートブックの設定」画面を開き、
「ハードウェア アクセラレータ」で「GPU」を選択します。

Contents

Chainer のインストール

Chainer のインストールを行います。

Chainer をインポートして Chainer のバージョンを確認します。

深層学習のためのライブラリをインポート

深層学習のためのライブラリをインポートします。
特に出力はありません。

MNIST データをロードする

手書き数字データのMNISTを「get_mnist」関数を使ってロードします。

手書き数字画像の表示

手書き数字画像を表示させてみます。
画像サイズは、28×28 pixelとなります。

正解データ(教師ラベル)を表示させてみます。

「4」と出力されます。

複数画像の表示

次に複数画像を表示させてみます。

一覧表示されます。

学習用と検証用データセット数を確認

これは、chainer のライブラリの「chainer.datasets.get_mnist」を使ったときに、自動でこの割合でデータセットを分割してくれるようです。

ニューラルネットワークの定義

まず、ニューラルネットワーク構築のためのパッケージをインポートします。

今回は、マルチレイヤーパーセプトロン(ニューラルネットワーク)のクラス(MLP)を作成します。
モデルの定義は、Chainerが提供している「chainer.Chain」というクラスを継承する形で行います。

「__init__」は初期化時に実行されます。
「__call__」はインスタンスが作成されてから関数のように呼び出されます。

例えば、
model = MLP() とすると、「__init__」が実行されます。
model(input_data) とすると、「__call__」が実行されます。

最適化手法の設定

今回、最適化手法には、勾配降下法の「optimizers.SGD」を使います。
ちなみに、optimizers は、「最適化を行う者」という意味で、
SGD は、確率的勾配降下法(Stochastic Gradient Descent)の略となっています。

以下のように optimizers の setup メソッドでモデルを指定します。

「lr」は学習率(learn rate)のパラメータとなります。

検証処理の設定

学習の検証処理部分の設定です。

まずは、学習の回数(MAX_EPOCH)を設定します。

検証処理は、一回Epoch学習後に呼び出され実行されます。

メイン処理(学習と検証)

学習と検証を行います。

以下のようなエラーが出力されてしまいました。。。
原因は調査中です。

学習済モデルの保存

今回学習したモデルを保存することができます。

「chainer-mnist.model」という名前の学習済みモデルが保存されていることが確認できました。

学習済モデルのダウンロード

保存モデルは、サーバー上にあるので、ローカルにダウンロードします。

というわけで、今回は、Deep Learning(深層学習)を使って、手書き文字認識の学習モデル構築をしてみました。

参考文献

関連記事

【機械学習・手法比較】決定木とナイーブベイズを比較してみた。

同じデータを使って、教師有り機械学習手法の 決定木(Decision Tree)とナイーブベイズ(N

記事を読む

【深層学習】 TensorFlow と Keras をインストールする【Python】

今回は、Google Colaboratory 上で、深層学習(DeepLearning)フレームワ

記事を読む

【PyTorch】ニューラルネットワークを構築する方法【NN】

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築したときのメモです。 フ

記事を読む

【機械学習】パーセプトロン(Perceptron)について。

パーセプトロンは、教師あり学習の中でも、入出力モデルベース(eager learning:働き者の学

記事を読む

【機械学習】 scikit-learn で不正解データを抽出する方法【Python】

Python の scikit-learn ライブラリを使って機械学習でテストデータを識別(2クラス

記事を読む

【機械学習】決定木(decision tree)について。

教師あり学習の一つである決定木(desicion tree)について勉強したことを書いていきます。

記事を読む

機械学習の手法のまとめ。

機械学習は、「与えられた入出力事例をモデル化する行為」のことで、ディープラーニングなどで注目を集めて

記事を読む

【Weka】ARFF 形式から CSV 形式に簡単に変換する方法。

フリーのデータマイニングツールである WEKA では、ARFF 形式と CSV 形式のデータを読み込

記事を読む

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用いて転移学習をしてみました。

記事を読む

【TensorFlow】GPUを認識しない時の対処方法【Python】

TensorFlow で GPU を認識させようとしたときにハマってしまったので、その対処方法のメモ

記事を読む

無料動画編集ソフト AviUtl で mp4 形式の動画を読み込み・出力する方法【Windows】

今回は、無料動画編集ソフト AviUtl で mp4 形式の動画を読み

【Cubase】イヤホンから音がでないときの対処方法。

Cubase でイヤホンから音がでなくなったときの対処方法のメモです。

【Cubase】特定のトラックを無効にする方法。

今回は、Cubaseで特定のトラックのみを無効にする方法について紹介し

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用い

【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)

→もっと見る

PAGE TOP ↑