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

参考文献

関連記事

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【画像認識】 Google画像検索結果を取得する方法 【google image download】

今回は、深層学習(DeepLearning)で画像認識をするための画像データの収集を、Google画

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

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

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

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑