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