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

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

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

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

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

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

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

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

参考文献

関連記事

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【探索】縦型・横型・反復深化法の探索手法の比較。

探索とは、チェスや将棋や囲碁などのゲームをコンピュータがプレイするときに、どの手を指すかを決定するの

記事を読む

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

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

記事を読む

【PyTorch】GPUのメモリ不足でエラーになったときの対処方法。

PyTorch で深層学習していて、 GPUのメモリ不足でエラーが出てしまったので、対処方法のメモで

記事を読む

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

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

記事を読む

【探索】ダイクストラ法・最良優先探索・Aアルゴリズムの比較。

縦型探索や横型探索では、機械的に順序を付け、最小ステップでゴールを目指します。 つまり、

記事を読む

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

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

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

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

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

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

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

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築

【OpenCV】検出した顔画像部分を切り出す方法【Python】

OpenCV を使って、Python で画像の中から顔部分を切り出した

→もっと見る

PAGE TOP ↑