AWS AI・機械学習・ディープラーニング

AWS Amazon Machine Learning で MNISTを分類

投稿日:2018年5月1日 更新日:

実際に機械学習アプリを使用するにあたってはAWSとGCPで最も簡単に作る方法を調査した。

GCPでは Cloud ML Engineというのがあるが、あくまでEngineであり、GUIで簡単にアプリを作れるものではないことが分かった。Tensorflowの実行環境というレベルのようだ。

それに対してAmazon Machine LearningはGUIで簡単にアプリを作れるようだ。元データはS3に置くようだ。

いきなりクマノミの分類アプリを作ろうと思ったのだが、データを用意する必要があり、それも調査が必要なため、まずは既に用意されているデータを用いてサンプルを作ることにした。

既に用意されているデータといえば、MNISTである。このページではAmazon MLを使用してMNISTの手書きデータを分類するアプリを作成する。

まずはbanking.csvを試してみよう

お金かかります! https://aws.amazon.com/jp/aml/pricing/

Machine Learningは無料枠外です。モデル構築時は0.42 USD/時課金されます。

アカウントを作成して、MLを選択しても、S3にデータが入っていない。が、サンプルとして用意されているbanking.csvを使用することができる。4.7MBもあり、41,188行もある巨大CSVだ。

Target というのが予測する対象である。デフォルトでは「y」という項目がTargetになっている。「y」の値は「0」「1」のどちらかなので、二項分類(バイナリ分類)となる。ここで、educationなどを選ぶと、多項分類になる。これはDatasource作成時に選択し、後から変えることができない。

やってみたら、ML model summaryのところで、「Status Pending」から進まない。banking.csvだからだろうか。

MLのdashbordを見ると、作成したtype=ML modelの行がin progressになっている。つまり、ML modelの作成が進行中なのだろう。

7分後に確認したらstatusがcompleteになっていた。

注目したいのは、AUC(Area Under Curve)という値。0.5~1の値をとるらしく、今回の学習では0.936となっているため、extremely good for most machine learning applications(機械学習アプリとして非常に良い)らしい。

Try real-time predictions

これで試しにbanking.csvのうち、最後のカラム、yが1になっているもの(例えば4行目のage=28の値)をそのまま入力してみよう。

すると、こうなる。

  • 何も入力しない Predicted label 0
  • campagneまで入力 Predicted label 0
  • pdaysまで入力 Predicted label 1

機械学習という感じがして嬉しかった。

Create a real-time endpoint

これでAPI化できるのだろう。

The size of your model is 431.8 KB. You will incur the reserved capacity charge of $0.001 for every hour your endpoint is active. The prediction charge for real-time predictions is $0.0001 per prediction, rounded up to the nearest penny.

  • モデルの大きさは431.8KBだよ。
  • 0.001ドル/時間は必ずかかるよ。
  • 1回API呼ぶごとに0.001ドルかかるよ。

ということらしい。モデルの大きさに応じて0.001ドルの部分が変わるのかな?分からないが、今回はやらない。

多項分類(クラス分類)

Datasourceを作り直して、Targetをeducationにしてみた。

すると、ML model performanceは

the ML model’s quality score is better than the baseline.
Average F1 score: 0.339

このようになった。基準よりはbetterらしい。2項分類の時とは精度に大きな差が出た。

 

MNISTの分類アプリを作成しよう

MNISTデータをS3にアップする

MNISTデータのダウンロードはこちら

一番上のtrain-images-idx3-ubyte.gzをダウンロードしよう。9.5MBもある。

gzはWindowsでは7zipなどで解凍できる。

と思ったら、これはubyte形式らしく、jpgなどの画像形式ではなかった。S3に放り込むものではないようだ。

S3 locationの指定方法

https://s3.amazonaws.com/aaaa/bbb.csv

ならば、s3://aaaa/bbb.csv となる。これがわからず数時間使ってしまった。この記事を読んで過ちに気づく(涙

S3バケットのアクセスポリシー

S3にアップしただけではこのようなエラーになる。

You don’t have read permission on this S3 URL. check permissions and make sure you have read permission on this S3

そこで、S3にアップしたファイルをMLで読み込めるように、S3のバケットのアクセスポリシーを設定する。

https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/granting-amazon-ml-permissions-to-read-your-data-from-amazon-s3.html

MNISTの分類はできない?

https://docs.aws.amazon.com/ja_jp/machine-learning/latest/dg/understanding-the-data-format-for-amazon-ml.html

ここをよく読んでみると、Amazon Machine Learningは

入力データは、カンマ区切り値 (.csv) 形式で保存する必要があります。

とのこと。画像ファイルをS3にたくさん突っ込んでというのは無理なのでしょうか。

http://wazalabo.com/amazon-machine-learning.html

Amazon Machine Learningはできることが限られ、数値データから結果を得る判別問題、回帰問題程度しか解けません。

Amazon Machine Learningは質の良い数値データを大量に持っているけれどデータサイエンティストや機械学習に通じたエンジニアは確保できないような環境、組織がちょっとした判別結果を機械学習で得るには向いていると感じました。

そのとおりですね。

本当に触りだけ、Machine Learningでできたし、構造化されたデータなら解析できることが分かったのでよしとします。

MNISTをCSV化する

画像データもCSV化して、1画像1行でCSVファイルにマッピングすれば使えると思いました。

MNISTのラベル付きCSVはkaggle.comから落とせる。(要サインアップ)

train.csvは73MBの訓練データで、1列目に0~9のラベル、2列目以降がピクセルごとのグレー数値になっている。

早速、S3にアップした。

-AWS, AI・機械学習・ディープラーニング

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

人工知能を補助する人工知能

人工知能を補助する人工知能が出てくる。

no image

Dockerの有用性

コンテナがあることで、EC2インスタンスのような計算資源を有効活用できる。 アプリケーション毎にEC2インスタンスを作ると、あまり使用しないアプリケーション分が無駄になる。 同一EC2インスタンス内に …

no image

AIはデータ分析の手法の1つ

に過ぎない。 AIと切っても切れない。AIが成立する大前提になってるのが、ビッグデータです。 ビッグデータを成立させているのが、大規模分散処理による高速化です。 今まで何十時間もかかっていたことが、数 …

no image

人工知能解体新書 ゼロからわかる人工知能のしくみと活用

この本は良かった。実用例が豊富だから。IBM Watsonの解説が多いんだけど、それだけWatsonはAI産業で重要なポジションを占めているってことがわかった。G検定の推薦図書では具体例が少なくて、「 …

no image

ビジネス上のAWSのメリット

必要な時に必要な分調達できる、即時性。 初期投資が少なくて済む。 BCP対策。冗長化が容易である。サーバーが落ちたときの対策を取りやすい。 インフラ構成を容易に試験し、変更できる柔軟性。 開発容易性。 …