機械学習モデル作成 - yoshitaku55/ai_knowledge GitHub Wiki
機械学習モデル作成
-
モデルの作成と復元
1. 訓練の途中・あるいは終了後にチェックポイントを保存可能。
これを利用して、モデルの使用・再訓練(中断時点から)が可能となる。
2. モデル全体を保存可能。(モデルのアーキテクチャ/重み/訓練設定を出力)
モデルの出力形式として、2種類用意されている。(SaveModel、HDF5)
HDF5を使用する場合、以下が必要。
pip install -q pyyaml h5py
以下チュートリアルを参考に、保存処理を実装する。手書き文字サービスではSaveModelを使用
https://www.tensorflow.org/tutorials/keras/save_and_load?hl=ja
参考サイト
-
画像読み込み
-
kerasを使用した画像読み込み
-
画像処理ライブラリ(Pillow)
メモ
WebAPI動作確認用 JSON POSTコマンド
-
画像ファイルパスを渡すパターン
curl http://127.0.0.1:5000/predict/handwriting -X POST -H "Content-Type: application/json" -d {"image_path":"C:/work/HandWriteService/HandWriteService/image/seo_own_0.png"}
-
BASE64文字列を渡すパターン
curl http://127.0.0.1:5000/predict/handwriting -X POST -H "Content-Type: application/json" -d {"image_path":"C:/work/HandWriteService/HandWriteService/image/seo_own_0.png","image_base64":"iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAIAAAD9b0jDAAAAyElEQVRIDa3BUaqjAABFsXv2v+gMPCgo1qkfJmFvC3tb2NvC3hZ2r9oF9l9hN6pt2EG1P9iNsG+qbdg31T6ws7BvKuyXaht2EHZRbcMeqLCDsIsKe6bCDsIuKuyZCjsIO6u2YQ9U27CDsLMKe6bCzsLOKuyZCjsLO6uwZyrsLOys2ob9Um3DzsIuKuyXCrsIu6iwXyrsIuyi2obdqPYHuwj7ptqGfVNhN8JuVPvAPqpt2I2wX6qdYffC3hb2trC3hb0t7G1hb/sH0t65ybFUM6YAAAAASUVORK5CYII="}
→TODO:pathを送信するか、画像データを送信するか。
いったん画像データを送信する方に決定。
デバッグ動作手順
-
WebAPI
①Python:Flask(0.11.x or later) 実行
②JSON POSTコマンドを送信
-
学習モデル作成
①train_handwrite.py 選択
②Python:Current File 実行
課題
-
1回request送信後、以下の実行時エラーが発生(WebAPIの起動方法に問題あり?)
RuntimeError: main thread is not in main loop
→matplotlibで確認用に画像表示処理を入れていたが、それが問題だった模様。
コメントアウトして、複数回呼び出しは可能になった。
plt.clf()→plt.close()でメモリ解放処理を入れる必要あり?かと思ったが、
入れるとload_model()で上記実行時エラーが複数回発生するようになる。
-
OpenCVのインテリセンス表示がおかしい
※インテリセンスが問題なだけで、実行すると問題なく処理される。
https://qiita.com/FXsimone/items/577e3924f40aa4a9d4ea
-
ログ出力機能を追加
http://toriaezu-engineer.hatenablog.com/entry/2016/08/28/090029
logging.conf ファイルにログ設定を記載し、読み込むパターン。
※fileRotatingHandler - filename に記載のパスが存在しない場合、以下例外が発生する。
「Unable to configure handler 'fileRotatingHandler'」
他、参考URL
①ログに対する考え方(長めだが参考になる議論、またPythonチュートリアルのログに関する記載は要確認)
-
設定ファイル追加
- 設定ファイルの選択肢
-
python設定ファイル(settings.py)
-
iniファイル(.ini): ConfigParserを使用して読み込む
-
yamlファイル(.yml / .yaml): 参考URL(https://developer.ibm.com/jp/technologies/containers/tutorials/yaml-basics-and-usage-in-kubernetes/)
→ 今回はyamlファイルを使用する。(ruby、Java等でも読込可能。iniファイルよりは使い勝手が良さそうなため)
※loadは必ずsafe_load() を使用すること。https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation
-
JSONバリデート処理追加(リクエストのチェック処理)
-
Cerberus ※今回はこれを使用
-
json-_schema
-
flask-expects-json
公式: https://pypi.org/project/flask-expects-json/
https://medium.com/analytics-vidhya/server-validation-in-flask-api-with-json-schema-963aa05e305f
-
以下は未対応
- JSONのリクエスト、レスポンスパラメータについてIF決定