MNISTデータ→png画像→(一部を)Chainer用データセット→training→predict1(1)(挫折、、、)
今までの復習。まとめてみる。
本来、MNISTとは手書き数字の28×28ピクセルのグレースケール画像のセットであるが、KerasやChainerでMNISTデータを扱う場合、最初から画像データが、数値データに変換されている。例えば、Chainerでは、
train, test = chainer.datasets.get_mnist()
でデータ準備完了。これでは何をやっているのかさっぱりわからない。つまり、いくらMNISTチュートリアルをやっても、自作データをもとにchainerで機械学習する方法が全くわからない。
本家サイトで配布されているMNISTデータでさえ、最初から数値データに変換されている。もちろん、この数値データの方が機械学習がしやすい、というか、画像を数値データに変換しないと機械学習ができないのではあるが、、、
(環境)
Windows 7 Pro (32-bit)
Anaconda 4.1.1
Python 3.5.2
Chainer 2.0
OpenCV3
Chainer2とOpenCV3のインストールは下記コマンド
pip install chainer=="2.0" conda install -c https://conda.anaconda.org/menpo opencv3
ちなみに、FLask 0.12.2, numpy, matplotlibなどは最初からAnacondaに入っており、Anaconda Promptで"pip feeze"で何がインストールされているかは確認できる。
(1)本家サイトからMNISTデータをダウンロード。
以下の本家サイトから、4つのgzファイルをダウンロード。
http://yann.lecun.com/exdb/mnist/
本家MNISTデータの詳細については、以下のサイトがわかりやすい(難しいけど、、、)です。
[データセット] MNIST 2017年2月26日 BY TECMEM
http://tecmemo.wpblog.jp/2017/02/26/dataset_mnist/
MNISTにおける入力データの詳細 mine820 2017年02月23日に更新
https://qiita.com/mine820/items/e9c08439465a5580a9cb
(2)Windowsでgzファイルを解凍するために、Lhaplusを以下のサイトからダウンロードしてインストール。
https://forest.watch.impress.co.jp/library/software/lhaplus/
(3)(1)でダウンロードしたgzファイルをダブルクリックで解凍して、今回は、 C:/py/MNIST101/ フォルダに保存。
(4)Anaconda Promptを開いて、以下を入力
activate chainer2 cd c:/py/MNIST101 jupyter notebook
以下の画面の右上の、New > Python3
下記のようなUntitled.ipynbが開かれるので、Untitled のところを、 “MNIST2png”に変更。
下記コードをコピペして、Shift + Enter
すると、C:/py/MNIST101/ フォルダの中に、test_images/ フォルダが作成され、中に、10000個の28×28のpngファイルが作成される。
(参考)
[データセット] MNIST 2017年2月26日 BY TECMEM
http://tecmemo.wpblog.jp/2017/02/26/dataset_mnist/
(5)上記のtest_imagesの中から、適当に0と1を目視で20個ずつ探して、新たに0/フォルダと、1/フォルダを作成して、それぞれその中にぶちこむ。
(6)以下のコードをコピペして実行
私の環境では、最初、
ImportError: No module named 'mock’
というエラーが出たので、Jupyter Notebook上で、"!pip install mock"してから、もう一度、上記コードを実行したら、うまくいった。
前回は結果は0.5だが、今回は0.875、、、おおっ?
ちなみに、同じフォルダに、my_mnist.model ファイルが作成されている。これがtrainingした結果のモデルとなり、predict(新しい画像を入力して予測する)際に、これを参照することになる。
(参考)
ChainerとFlaskで作る機械学習デモアプリ 前編 モデルの作成と保存
https://recipe.narekomu-ai.com/2017/10/chainer_web_demo_1/
(7)新しい手書き数字jの画像を入力して、予測(predict)するシステムを、Flaskを用いて作る。(筆者がそれ以外のやり方がわからないため、この方法となっているが、本当は、predict.py をのコードをうまく書けば、もっと簡単にできると思われる。)
以下のサイトを参考(コピペ)して、flaskとあわせてみる
https://recipe.narekomu-ai.com/2017/10/chainer_web_demo_2/
ChainerとFlaskで作る機械学習デモアプリ 後編 Webアプリの構築 2017/10/6
C:/py/MNIST101/ フォルダの下に、
result/
static/
templates/
フォルダを作成する。
C:/py/MNIST101/ フォルダの下に、"predict.py" を作成し、以下のコードをコピペ。
C:/py/MNIST101/templates/ フォルダの下に、"index.html" を作成して、以下のサイトの"index.html"のコードをコピペして保存。
https://recipe.narekomu-ai.com/2017/10/chainer_web_demo_2/
(参考) ほぼ、以下のページのコピペです。
ChainerとFlaskで作る機械学習デモアプリ 後編 Webアプリの構築 2017/10/6
https://recipe.narekomu-ai.com/2017/10/chainer_web_demo_2/
(8)アプリの起動と確認(predictの実際)
Anaconda Promptで、以下のコマンドを入力。
python predict.py
WEBブラウザで、http://localhost:5000 を開く。
ファイルを選択 をクリックして、trainingに使用していない画像を選択してから、送信 をクリック。
あ、全然うまくいっていない。
原因は不明。
また後日、、、
<20171103追記載>
43行目の
model = MyModel()
の部分を、
model = L.Classifier(model)
にしなければいけないのかもしれない。(未確認)
(ModelをTrainerに渡すためにL.Classifierで包む必要がある?)
http://studylog.hateblo.jp/entry/2016/01/05/212830#Classifier
やり直し
MNIST102
● mnist_training.py
python mnist_training.py
https://gist.github.com/adash333/fca0128a93ffd7d68617ab373da032ac
python predict.py
しかし、1以外の画像を判定すると、predict: の画面が出てこない。。。
困った。。。
まだ途中。。。
途中
ディスカッション
コメント一覧
まだ、コメントがありません