スポンサーリンク

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/
image_thumb

image

本家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を以下のサイトからダウンロードしてインストール。

今回は、imageをインストールした。

https://forest.watch.impress.co.jp/library/software/lhaplus/

(3)(1)でダウンロードしたgzファイルをダブルクリックで解凍して、今回は、 C:/py/MNIST101/ フォルダに保存。

image

(4)Anaconda Promptを開いて、以下を入力

activate chainer2
cd c:/py/MNIST101
jupyter notebook

image

以下の画面の右上の、New > Python3

image

下記のようなUntitled.ipynbが開かれるので、Untitled のところを、 “MNIST2png”に変更。

image

下記コードをコピペして、Shift + Enter

 

image

すると、C:/py/MNIST101/ フォルダの中に、test_images/ フォルダが作成され、中に、10000個の28×28のpngファイルが作成される。

image

image

image

(参考)
[データセット] MNIST 2017年2月26日 BY TECMEM
http://tecmemo.wpblog.jp/2017/02/26/dataset_mnist/

(5)上記のtest_imagesの中から、適当に0と1を目視で20個ずつ探して、新たに0/フォルダと、1/フォルダを作成して、それぞれその中にぶちこむ。

image

image

image

(6)以下のコードをコピペして実行

 

 

私の環境では、最初、

ImportError: No module named ‘mock’

というエラーが出たので、Jupyter Notebook上で、”!pip install mock”してから、もう一度、上記コードを実行したら、うまくいった。

image

image

image

前回は結果は0.5だが、今回は0.875、、、おおっ?

ちなみに、同じフォルダに、my_mnist.model ファイルが作成されている。これがtrainingした結果のモデルとなり、predict(新しい画像を入力して予測する)際に、これを参照することになる。

image

(参考)
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/

フォルダを作成する。

(変更前)
image

(変更後)
image

C:/py/MNIST101/ フォルダの下に、”predict.py” を作成し、以下のコードをコピペ。

image

C:/py/MNIST101/templates/ フォルダの下に、”index.html” を作成して、以下のサイトの”index.html”のコードをコピペして保存。

https://recipe.narekomu-ai.com/2017/10/chainer_web_demo_2/

image

(参考) ほぼ、以下のページのコピペです。
ChainerとFlaskで作る機械学習デモアプリ 後編 Webアプリの構築 2017/10/6
https://recipe.narekomu-ai.com/2017/10/chainer_web_demo_2/

(8)アプリの起動と確認(predictの実際)

Anaconda Promptで、以下のコマンドを入力。

python predict.py

image

image

WEBブラウザで、http://localhost:5000 を開く。

image

ファイルを選択 をクリックして、trainingに使用していない画像を選択してから、送信 をクリック。

image

image

image

あ、全然うまくいっていない。

原因は不明。

また後日、、、

 

<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

image

image

image

python predict.py

image

image

しかし、1以外の画像を判定すると、predict: の画面が出てこない。。。

困った。。。

まだ途中。。。

 

 

 

 

 

 

途中

スポンサーリンク