【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(深層学習)を使って、手書き文字認識の学習モデル構築をしてみました。

参考文献

関連記事

【Weka】フリーの機械学習ソフトをインストールする方法。

Weka は、GUIで使えるフリーの機械学習ソフトです。 https://ja.wikiped

記事を読む

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

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

記事を読む

【Fashion-MNIST】ファッションアイテムのデータセットを使ってみた【TensorFlow】

今回は、機械学習用に公開されているデータセットの1つである「Fashion-MNIST」について紹介

記事を読む

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

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

記事を読む

【Weka】アソシエーション・ルール(association rule)【機械学習】

フリーの機械学習ツール Weka でアソシエーション・ルール(association rule)を使

記事を読む

【Weka】欠損データを自動的に補完するフィルタを使ってみた。

機械学習で用いるデータについてです。データは完璧なことに越したことはないが、通常は、ある属性の値が入

記事を読む

【機械学習】モンテカルロ法(Monte Carlo method)について。

モンテカルロ法(Monte Carlo method)とは、シュミレーションや数値計算を乱数を用いて

記事を読む

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

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)を構築する方法について紹介しま

記事を読む

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

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

記事を読む

【Weka】CSVファイルを読み込んで決定木を実行。

フリーの機械学習ソフト Weka を使って、CSVファイルを読み込んで決定木(Decision Tr

記事を読む

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

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

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

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

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑