ABEJA Platformのテンプレートを使用して、ノンプログラミングで機械学習モデルを学習する

## はじめに

本記事は、以下の手順をまとめた記事です。
- ABEJA Platformのテンプレートを使用して、画像分類の機械学習モデルをノンプログラミングで学習する

（本記事の後編はこちら）
ABEJA Platformのテンプレートを使用して、ノンプログラミングで機械学習モデルをデプロイする
https://qiita.com/yushin_n/items/fb338ca9bd3c685ad691

## 事前準備
- データセットの用意
    - 今回は[KaggleのFlowers Recognitionのデータセット](https://www.kaggle.com/alxmamaev/flowers-recognition)をローカルにダウンロードして、こちらの[Qiitaの記事の手順](https://qiita.com/yushin_n/items/98fcc788710c0ace3a4a)を参考にABEJA PlatformのDatasetsを作成しました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/0052409e-bf53-8480-6041-4b176e25cf55.png" width=80%>

## Job Definitionの作成
まずは、コンソールのTrainingのJob Definitionのページから、Job Definitionを作成します。no sampleを選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/83249c29-250a-909a-8eff-906b44d1d425.png" width=70%>

その後、バージョンを作成します。タブのTemplatesをクリックして、Image ClassificationのCPUまたはGPUを選択します。Datasetには、モデルに学習させるデータセット名を指定します。aliasには、trainと入力します。

2019年6月21日現在、テンプレートは画像分類（データセットは1つ、ラベルのカテゴリは1つ）にのみ対応していますが、テンプレートの種類は順次追加される予定です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/d99be65e-204c-abd3-1dec-e39c37d2fc85.png" width=70%>

JobのVersion 1が作成されました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/0bdcd051-2864-62cb-656c-bd3a36596428.png" width=70%>

続いて、Jobsをクリックして、学習ジョブを作成します。Job Definition Versionとして、先ほど作成したバージョン1を選択します。また、インスタンスタイプとして、gpu-1を選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/ff859a41-df4c-4790-dadf-39f11acb9eb5.png" width=70%>

学習ジョブが実行されました！自分の環境では、ジョブがPendingからRunningになるまでに、15分程度かかりました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/cc941a1b-88a5-1473-4664-f256cd1b06cf.png" width=70%>

学習開始後にTensorBoardのボタンをクリックすると、TensorBoadの画面が開き、Training Loss, Training Accuracy, Validation Loss, Validation Accuracyのデータを可視化できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/4611f448-67f2-9f4e-f730-35c660126637.png" width=80%>

TensorBoardを眺めながら、学習が終わるのを待ちます。・・と思ったら、7エポック目で学習がSuccessとなりました。EarlyStoppingが実装されているため、Validation Lossに変化がなくなるとその時点で学習が終了します。GPUを無駄に使用しないために、よい機能ですね。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/ee947d1f-a7db-dbbe-1377-4055d9751a33.png" width=80%>

結果、Validation Accuracyは、82.9%でした。
この[Mediumの記事](https://medium.com/@rockyxu399/three-models-for-kaggles-flowers-recognition-dataset-bc2ff732cf4e)によると、同じデータセットを使って以下の結果が出たとのことです。ABEJA Platformのテンプレートは、ResNet-50には及びませんでしたが、他2つより、よい結果でした。

| Model | Accuracy for validation samples |
|:--|--:|
| Built from scratch | 0.72 |
| Built by VGG19 | 0.40 |
| Built by ResNet-50 | 0.92 |

なお、このテンプレートは、各種ハイパーパラメーターをチューニングすることができます。やり方は非常に簡単で、学習ジョブを作成する画面にて、環境変数としてパラメーターを指定するだけです。指定できる環境変数の一覧は、こちらを参照下さい。
https://github.com/abeja-inc/platform-template-image-classification

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/d58f4aa9-2bfb-3e3c-43ff-ed2397ab8aff.png" width=70%>

Dropoutを0.7に変えると、Validation Accuracyが85.4%まで上がりました！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376869/6509fcf1-081d-2fe4-5ef3-e05e3fdda1cf.png"　width=70%>

## まとめ
本記事では、ABEJA Platformのテンプレートを使用して、画像分類の機械学習モデルをノンプログラミングで学習する手順をまとめました。今後、学習したモデルをノンプログラミングでWeb APIとしてデプロイできる機能も追加される予定です :dog:

追記：2019年6月28日にノンプログラミングでWeb APIをデプロイできる機能が追加されました！

## 参考
ABEJA Platformは、トライアルも提供しています。気になられた方は、是非、お気軽にお問い合わせください。また、フォーラムもありますので、是非、ご活用ください。

ABEJA Platformに関するお問い合わせ
https://abejainc.com/platform/ja/contact/

ABEJA Platform Forum
https://forums.abeja.io/