(第6回)MNISTの学習

これまでは、意味のないデータで学習(というか傾きを算出して、その方向にデータを変更するだけ)してきましたが、 実際にデータセットを使って学習を行います。機械学習の基本の手書きの数値を学習して判定するMNISTが 実行しやすいですので、これを使います。

(参考サイト)https://github.com/oreilly-japan/deep-learning-from-scratch

<データセット>

データセットを準備します。機械学習のセミナーを受講すると「機械学習の失敗例」として、流行っているから機械学習を使った。 という事が良く挙げられます。機械学習をよく理解せずにデータもないところから機械学習をしても良い結果は得られません。 このデータを用意するという事が機械学習で最も重要で、最もコストが掛かる部分だと考えられます。
MNISTは機械学習の入門としてよく使われるもので、そのデータセットを使います。

①ダウンロード
以下の4つをダウンロードします。これがMNISTのデータセットです。
http://yann.lecun.com/exdb/mnist/
train-images-idx3-ubyte.gz
train-labels-idx1-ubyte.gz
t10k-images-idx3-ubyte.gz
t10k-labels-idx1-ubyte.gz

次に下の4つのファイルをダウンロードします。

mnist.py
two_layer_net.py
gradient_2.py
functions.py

次は、メインのプログラムになります。下のプログラムと同じフォルダに上の8個のファイルを保存しておきます。

このプログラムを実行すると、最初は、「mnist.pkl」というデータセットのファイルが無いので、最初にダウンロードした4個のファイルを展開して、データセットを 作成します。実際には、

このような出力になっていると思います。もし違う出力の場合は上手く動作できていません。 上手く動作している場合、これはダミーデータを学習しているため、数値が全く改善されないことがわかると思います。
これが機械学習の失敗例です。AIや機械学習を使えば、簡単に良い結果が得られるという勘違いをして、 適当なデータを使って学習をすると、このような結果になります。

プログラムの「#ダミー入力」という行をコメントアウトして実行すると、

このような結果が得られます。数値も0から0.95まで改善していることがわかります。
この結果が「学習済みモデル」という物で、自分が書いた文字を認識することができるようになります。 学習の回数などを変えて、正解率をできるだけ高くすることが機械学習の最大のモチベーションと言っても 過言ではありません。過学習という問題点はありますが・・・。

-------------