こんにちは、ガロガロニーです。本日はローコードで簡単に機械学習モデルを作れるAutoMLライブラリ「AutoKeras」を使って、画像分類モデルをカスタム実装する方法を紹介します。
AutoMLとは
AutoML(Automated Machine Learning)は、これまでデータサイエンティストなどの専門家が実施していた機械学習モデルの設計や構築などの作業を自動化する手法のことを指します。AutoMLを使えば、機械学習にあまり詳しくない人でも、簡単にローコードで機械学習モデルを実装できます。しかも、パラメータやモデルのチューニングまで自動で探索してくれるので、誰でも高機能なモデルを短時間で作ることができます。AutoMLを取り入れることで、データサイエンティストの人手不足や機械学習プロセスの効率化につながるため、ビジネス上でも実用性が高く、非常に注目されている技術の一つになります。
AutoKerasとは
AutoKerasとは、テキサスA&M大学のDATA Labで開発されたPythonのAutoMLライブラリです。Kerasと呼ばれるオープンソースのニューラルネットワークライブラリを元に作られています。私自身も、KerasはDeepLearningモデルの開発で愛用しており、これまで使ったことがある方であれば、簡単に使うことができると思います。AutoKerasでは下記のデータに対して分類問題・回帰問題を扱えます。
- 画像データ
- テキストデータ
- 構造化データ
今回は、Cifar10データセットを使って、画像分類モデルをAutoKerasで実装していきたいと思います。
実行環境
まずはAutoKerasを実行できるPython環境について準備します。AutoKerasは、TensorFlowと呼ばれるGoogleが開発した機械学習ライブラリをバックエンドとして実行します。pip install autokerasでAutoKeras本体と依存ライブラリであるTensorFlowなどをインストールできますが、TensorFlowのバージョンは2.3.0以上が前提となるので、その点は注意してください。今回使用したPythonやライブラリのバージョンは下記のとおりです。
- Python:3.7.12
- TensorFlow:2.5.2
- AutoKeras:1.0.16
ImageClassifierメソッドによる実装
Cifar10データセットを使って、画像分類モデルをAutoKerasで実装してみました。ImageClassifierメソッドを使えば、下記のようにローコードでモデルの構築から評価まで、簡単に実装することができます。引数のmax_trialsは最適なモデルを自動で探索するための試行回数となります。
# ライブラリ
import autokeras as ak
from tensorflow.keras.datasets import cifar10
# Cifar10データセットの準備
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# AutoMLモデルの初期化
clf = ak.ImageClassifier(max_trials=3)
# 訓練データを使ったモデル構築
clf.fit(x_train, y_train, epochs=5)
# テストデータを使った評価
print("Accuracy: {accuracy}".format(accuracy=clf.evaluate(x_test, y_test)[1]))
AutoModelメソッドによる実装
ImageClassifierメソッドを使えば、簡単にAutoKerasでモデル実装できますが、ネットワークのタイプやパラメータなどの探索空間を指定できないので、モデル構築の自由度は下がります。これはデータサイエンティストなどのモデルを作り込みたい人からすると、あまり嬉しくはないと思います。AutoKerasでは、Efficitent Neural Architecture Search(ENAS)によるニューラルネットワークの構造設計を採用しているのですが、Searcherのアーキテクチャ生成で、探索するネットワークのタイプなどを指定するためには、AutoModelメソッドを使う必要があります。
- Searcher:新しいモデルのアーキテクチャを生成
- Graph:生成されたアーキテクチャからモデルを構築
- Trainer:構築されたモデルを使って学習
- Models:学習済みのモデルはストレージに保存
- 1~4を繰り返し行い、最適なモデルを探索する
AutoModelメソッドを使った実装は下記になります。ImageBlock内で探索するネットワークタイプを指定したり、データの正規化や拡張の指定などができます。KerasのFunctional APIを使ったことがある人であれば、AutoModelメソッドでより自由にモデルを構築することができます。このようなモデル設計の自由度があると、作り込みたい人にとっても嬉しいのではないかと思います。
# ライブラリ
import autokeras as ak
from tensorflow.keras.datasets import cifar10
# Cifar10データセットの準備
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
##### 探索空間のカスタマイズ(追記箇所)
# 画像データの入力ノード
input_node = ak.ImageInput()
# 探索するレイヤの指定
output_node = ak.ImageBlock(
## 一般的なConvレイヤのみを使用
block_type='vanilla',
## データは正規化
normalize=True,
## データ拡張は行わない
augment=False)(input_node)
# 最終層の分類ネットワーク
output_node = ak.ClassificationHead()(output_node)
#####(追記終)
# AutoMLモデルの初期化(ImageClassifierメソッドからAutoModelメソッドに変更)
clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=3)
# 訓練データを使ったモデル構築
clf.fit(x_train, y_train, epochs=5)
# テストデータを使った評価
print("Accuracy: {accuracy}".format(accuracy=clf.evaluate(x_test, y_test)[1]))
まとめ
本日はローコードで簡単に機械学習モデルを作れるAutoMLライブラリ「AutoKeras」を使って、画像分類モデルをカスタム実装する方法を紹介しました。あまり機械学習に慣れていない人は、 ImageClassifierメソッド を使い、モデルをある程度作りこみたい人はAutoModelメソッドを使えばよいと思います。これからもAutoMLの分野は伸びていくと思うので、ぜひ試してみてください。それではまた!
コメント