はじめての転移学習ハンズオン
亀田 治伸
こんにちは、エバンジェリスト 亀田です。
Amazon SageMaker は AWS が開発しサービスとして提供している機械学習のマネージドサービスになります。機械学習には、データの前処理、開発や学習基盤の準備、生成された推論環境をホスティングする基盤や API 構築等多くの付随作業が発生し、データサイエンティスト等機械学習エンジニアの時間を消費します。
SageMaker をご利用いただくことで、これらの作業の多くが自動化され、より本質的なデータやモデルチューニングなどの作業に集中することができます。
Jump Start は 2020 年 12 月に、SageMaker の新しい機能としてリリースされました。機械学習のモデルを生成するためには、それなりの量のデータが必要となりますが、モデルが存在しない場合、ユーザーから効率的にデータを集めることができず、ある種のデッドロックが発生するケースがあります。Jump Start では 15 以上の利用シーンに対して、150 を超えるあらかじめ学習済のモデルを OSS ベースでご提供します。開発者は、データを準備することなくモデルを起動することができます。そして蓄積されたデータをもとに転移学習を行い、独自にカスタマイズされたモデルを少ないデータ量で実現させることが可能となります。
このワークショップでは、転移学習で花の画像を識別し花の名前を出力するモデルを生成します。
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
![](https://d1.awsstatic.com/Digital%20Marketing/sitemerch/banners/reInvent19%20Midpage%20Banner/Site-Merch_Builders-Library_MidPage-Banner.348357fe27fe87372a78753be2f02bbaec7eb9a9.png)
このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »
毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。
1. Amazon SageMaker JumpStartの起動
2. 画像解析モデル (Vision models) の起動
学習済モデルの起動中となります。
エラーが出る場合、AWS アカウントの開設直後など、起動しようとしているインスタンス ml.m5.large の利用が許可されていないことが考えられます。AWS サポートへ上限緩和申請を行う必要があります。
Open the downloaded images and load in memory. You can upload any image from your local computer in the directory and open them here. の部分を以下に書き換え実行します。
images = {}
with open("bird.jpg", 'rb') as file: images["bird.jpg"] = file.read()
with open("ImageNetLabels.txt", 'r') as file: class_id_to_label = file.read().splitlines()
ImageNetLabels.txt を開き、鳥の推論時に出てきた文字列を検索し適当に書き換えて、Open the downloaded... の下の部分から再度実行します。パラメータが書き換わったことが確認できます。
今度は再度 JumpStart のトップ画面から ResNet 50 の起動画面にいきます。
先ほど起動した Deploy Mode の下に Fine-tune Model のボタンがあります。こちらで、転移学習を行い追加の判断を行う画像を学習させることができます。
https://filesharingharunobukameda.s3-ap-northeast-1.amazonaws.com/flower_photos.zip から
ダウンロードした flower_photos をフォルダ毎 S3 バケットにアップロードします。
今までの作業の中で S3 バケットができていますので、sagemaker-studio-xxxxxxx となっているバケットを選んでフォルダをアップロードしてください。flower_photos の下に書く花の名前のフォルダがあり、その中に複数の jpg ファイルが含まれています。
Endpoint の作成が完了すると Open Notebook のボタンが表示されますのでそちらをクリックします。
Notebook が起動したら先ほどと同じように順番にクリックして犬と猫が推論されることを確認します。
Open the downloaded images... の下のプログラムを以下に書き換えます。
images = {}
with open("kameda.jpg", 'rb') as file: images["kameda.jpg"] = file.read()
with open("daisy.jpg", 'rb') as file: images["daisy.jpg"] = file.read()
with open("dandelion.jpg", 'rb') as file: images["dandelion.jpg"] = file.read()
with open("roses.jpg", 'rb') as file: images["roses.jpg"] = file.read()
with open("cat.jpg", 'rb') as file: images["cat.jpg"] = file.read()
with open("sunflowers.jpg", 'rb') as file: images["sunflowers.jpg"] = file.read()
with open("tulips.jpg", 'rb') as file: images["tulips.jpg"] = file.read()
with open("ImageNetLabels.txt", 'r') as file: class_id_to_label = file.read().splitlines()
推論を実行して結果を見ます。
この状態ではラベル用テキストが正しく設定されていないため、花の違いを正しく区別しているものの、表示が正しくされていません。label.txt をアップロードし上記プログラムの ImageNetLabels.txt を書き換えます。再度推論を実行すると花の違いやラベル出力が異なることがわかります。
3. 自然言語解析モデルの起動
先ほどと同じ手順でモデルを起動し、notebook を開きます。その際 Endpoint Name を適当な短い名前に変更します。(testyyyymmdd 等) BERTは一般的にモデルが巨大であるため、先ほどよりは時間がかかります。
起動したら、上から 1 個づつ実行し、QA が動作することを確認します。
2 つ目のスクリプトの sentence_pair1 の 2 つの文字列を関連する日本語文字列に置き換えます。以下はその一例です。
sentence_pair1 = ["日本の首都は?", "日本には多くの街がありますが、首都は東京です"]
サイド上から順番に実行し、2 つの文に相関があると推論される場合、entailment、相関が無いと推論される場合 no-entailment と出力されます。
4. リソースの削除
以下を必ず削除してください。
- EFS
- S3 バケット (sagemakerから始まるもの)
- SageMaker 推論エンドポイント
- SageMaker Studio のアプリ
- SageMaker Studio のユーザー
- SageMaker Studio
おわりに
みなさん、いかがでしたでしょうか。
このハンズオンで転移学習を体験していただけたらうれしいです。
Jump Start は他にも多くのモデルが提供されていますので、いろいろ試してみてください。
プロフィール
![](https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/profile/photo_kameda_harunobu_2.1db8628a5a522f0eb274fcf96cf223babb857470.jpg)
亀田 治伸
アマゾン ウェブ サービス ジャパン合同会社 エバンジェリスト
兵庫県伊丹市出身。米国州立南イリノイ大学卒業。
認証系独立 ASP 、動画・音楽配信システム構築、決済代行事業者を経て現職。ユーザー視点に立ったわかりやすい AWS のサービス解説を心掛ける。
AWS のどんなサービスでも 1 分づつ資料なしで説明することができる、という特技を持つ自称【AWSマニア】
AWS を無料でお試しいただけます