学習

学習 #

本章では、アップロードした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