WSLとJupyter-notebookでCNN、その1、環境構築
画像の分類をしたくてDeep Learningについて勉強している
ネットで調べながらこの本を何度も読み直している
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
(Amazonのサイトに飛びます)
CourseraのMachine Learningの講義もおすすめ
mecobalamin.hatenablog.com
試してみたいデータもあるのでどこか
似たようなことをやっている人がないか探してみたら
Kerasの開発者がCNNを使ってMNISTの画像認識を行っていた
https://github.com/keras-team/keras/tree/master/examples
いくつもファイルがあるがこの中からmnist_cnn.pyを利用した
mnist_cnn.pyについてはググるといくつも情報が出てくる
https://pondad.net/deep-learning/2016/12/25/keras-mnist.html
【AI初心者向け】mnist_cnn.pyを1行ずつ解説していく(KerasでMNISTを学習させる) - Qiita
手持ちの画像データを使いたいので
画像を読み込ませるために以下のサイトを参考にした
kerasでCNN 自分で拾った画像でやってみる - Qiita
Google Colaboratory で Keras 自作データセットを読み込み - Qiita
sklearn の train_test_split でデータの順番の情報を保持しておく - Qiita
実際に行ったのは
- mnist_cnn.pyを動かす環境の構築と実行
- 手持ち画像を読み込ませるコードの実行
今回はmnist_cnn.pyを動かす環境の構築
実行環境はWSLに作った
WSLを利用したのはPower Shellには
tensorflowをインストールできなかったためだ
まずはkeras/tensorflowをインストールする仮想環境を用意する
以下の過去記事を参考にした
mecobalamin.hatenablog.com
condaのコマンドを使ってtfという仮想環境を作る
conda create -n tf python=3.7 anaconda
環境の切り替えは
conda activate tf
と
conda deactivate
で行う
この環境にkerasとtensorflowをWSLにインストールした
keras/tensorflowの関係がいまいちよくわかっていないけど
tensorflowはバックエンドで実際の作業をするライブラリで
kerasはtensorflowを効率よく使うためのライブラリという認識
インストールは以下の通り
pip install --upgrade tensorflow
conda install keras
しようがないとはいえpipとcondaを混ぜて使ってしまったのが若干気になる
condaとpip:混ぜるな危険 - onoz000’s blog
仮想環境下にインストールしているので
やり直しをしやすいと思う
pythonコードの実行環境としてJupyterもインストール
pip install Jupyter
jupyter-notebookを使えるようになる
jupyter-notebookはデータサイエンス・機械学習の分野で
よく使われているらしい
セル毎にコードを実行できるので
修正箇所だけ実行とかできて便利
インストール後にjupyter-notebookを起動すると
jupyter-notebook
以下の表示が出るのでURLを
windowsのbrowserにコピペすると
jupyter-notebookを利用できる
To access the notebook, open this file in a browser: file:///home/hogehoge/.local/share/jupyter/runtime/nbserver-hogehoge-fugafuga.html Or copy and paste one of these URLs: http://localhost:8888/?token=hogehogefugafuga or http://127.0.0.1:8888/?token=hogehogefugafuga
実際にはtokenにアルファベットと数字の文字列が入っている
jupyter-notebookで新規にnotebookを作って
mnist_cnn.pyの中身をコピペするとこんな感じ
実行結果は以下の通り
Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz 11493376/11490434 [==============================] - 5s 0us/step x_train shape: (60000, 28, 28, 1) 60000 train samples 10000 test samples Train on 60000 samples, validate on 10000 samples Epoch 1/12 60000/60000 [==============================] - 138s 2ms/step - loss: 0.2544 - accuracy: 0.9218 - val_loss: 0.0638 - val_accuracy: 0.9800 Epoch 2/12 60000/60000 [==============================] - 133s 2ms/step - loss: 0.0873 - accuracy: 0.9743 - val_loss: 0.0448 - val_accuracy: 0.9861 Epoch 3/12 60000/60000 [==============================] - 134s 2ms/step - loss: 0.0651 - accuracy: 0.9802 - val_loss: 0.0327 - val_accuracy: 0.9894 Epoch 4/12 60000/60000 [==============================] - 139s 2ms/step - loss: 0.0539 - accuracy: 0.9836 - val_loss: 0.0291 - val_accuracy: 0.9901 Epoch 5/12 60000/60000 [==============================] - 130s 2ms/step - loss: 0.0445 - accuracy: 0.9866 - val_loss: 0.0301 - val_accuracy: 0.9900 Epoch 6/12 60000/60000 [==============================] - 131s 2ms/step - loss: 0.0407 - accuracy: 0.9874 - val_loss: 0.0292 - val_accuracy: 0.9900 Epoch 7/12 60000/60000 [==============================] - 123s 2ms/step - loss: 0.0368 - accuracy: 0.9891 - val_loss: 0.0254 - val_accuracy: 0.9907 Epoch 8/12 60000/60000 [==============================] - 74s 1ms/step - loss: 0.0326 - accuracy: 0.9899 - val_loss: 0.0300 - val_accuracy: 0.9908 Epoch 9/12 60000/60000 [==============================] - 77s 1ms/step - loss: 0.0310 - accuracy: 0.9905 - val_loss: 0.0243 - val_accuracy: 0.9921 Epoch 10/12 60000/60000 [==============================] - 76s 1ms/step - loss: 0.0272 - accuracy: 0.9919 - val_loss: 0.0268 - val_accuracy: 0.9921 Epoch 11/12 60000/60000 [==============================] - 76s 1ms/step - loss: 0.0264 - accuracy: 0.9916 - val_loss: 0.0268 - val_accuracy: 0.9917 Epoch 12/12 60000/60000 [==============================] - 77s 1ms/step - loss: 0.0261 - accuracy: 0.9920 - val_loss: 0.0247 - val_accuracy: 0.9922 Test loss: 0.024740188298751492 Test accuracy: 0.9922000169754028
mnist_cnn.pyには
Gets to 99.25% test accuracy after 12 epochs
(there is still a lot of margin for parameter tuning).
16 seconds per epoch on a GRID K520 GPU.
とある
test accuracyは0.9920で大体あっているようだ
また今回使用した
Intel Core i5 7200U、GPUなしのnotebook PCでは
74-139s/Epochなので1/5 - 1/9 程度の計算速度か
値段の差を考えるとまあ順当
NVIDIA GRID k520 8 GB gddr5 PCIe gen3 x16クラウドゲームケプラーGPUグラフィックス900 – 12055 – 0020 – 000
とりあえず環境ができたので
次は手持ちのデータで試してみる