学習 #
本章では、アップロードしたAIモデルを用いて学習を行うまでの一連の手順を説明します。
API 確認 #
本章では、以下の API を利用します。
POST /api/v2/train/{model_id}
- モデル id と学習データまでのファイルパスを受け取り、再学習を実行します。
学習データ準備 #
学習データには .csv
または .pickle
のファイルフォーマットを利用できます。
今回は、学習データにはチュートリアル ガスセンサーの予測 で利用した Gas_sensor.csv を利用します。適宜、ダウンロードしてください。
コンテナへのデータコピー #
Node-AI Berry を用いた学習 API の実行には、 コンテナの立ち上げ で構築したコンテナ内にデータを事前にコピーしておく必要があります。
以下のコマンドを実行して、コンテナ内に .csv
ファイルのコピーを行います。
docker cp Gas_sensor.csv berry:/nodeai/data/data.csv
学習実行 #
Swagger UI を用いて、/api/v2/train/{model_id}
API を利用して学習を行います。学習のモデルには指定した model_id
と同じモデルが利用されます。
model_id
には前章でモデルをアップロードした際に生成された model_id
を指定してください。Request body
には、前節でコンテナ内へコピーした学習データのコンテナ内絶対パス data_path
を指定してください。また学習に用いるモデルが MLP の場合は、 training_params
を指定してください。
線形回帰における Request body
線形回帰の場合は
training_params
のパラメーターは不要なので、以下のようなフォーマットで渡してください。// 線形回帰 { "data_path": "/csv/data/path.csv" }
// MLP { "data_path": "/csv/data/path.csv", "training_params": { "epochs": 20, "batch_size": 128 } }
実行に成功すれば、下図のように新しいモデル ID が表示されます。
学習中のサーバーログの確認
学習実行中に以下のコマンドを実行することで、サーバ側のログを確認できます。
% docker logs berry -f INFO: 192.168.0.69:56985 - "POST /api/v2/predict/52d9b157-b62f-4576-a6bf-8650573eb33e?attribution=false&tone=true HTTP/1.1" 200 OK Train on 9857 samples Epoch 1/20 9857/9857 [==============================] - 1s 82us/sample - loss: 0.2600 Epoch 2/20 9857/9857 [==============================] - 1s 61us/sample - loss: 0.1821 Epoch 3/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1694 Epoch 4/20 9857/9857 [==============================] - 1s 59us/sample - loss: 0.1612 Epoch 5/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1591 Epoch 6/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1326 Epoch 7/20 9857/9857 [==============================] - 1s 59us/sample - loss: 0.1287 Epoch 8/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1218 Epoch 9/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1244 Epoch 10/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1170 Epoch 11/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1103 Epoch 12/20 9857/9857 [==============================] - 1s 58us/sample - loss: 0.1084 Epoch 13/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1092 Epoch 14/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1017 Epoch 15/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.1074 Epoch 16/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.0962 Epoch 17/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.0969 Epoch 18/20 9857/9857 [==============================] - 1s 60us/sample - loss: 0.0967 Epoch 19/20 9857/9857 [==============================] - 1s 59us/sample - loss: 0.0941 Epoch 20/20 9857/9857 [==============================] - 1s 59us/sample - loss: 0.0930 INFO: 192.168.0.69:58890 - "POST /api/v2/train/52d9b157-b62f-4576-a6bf-8650573eb33e?skip_preprocesses=false HTTP/1.1" 200 OK