ホーム » AutoKeras

AutoKeras」カテゴリーアーカイブ

AutoML : NNI 1.5 : 自動調整 : チューナー : ネットワーク Morphism

AutoML : NNI 1.5 : 自動調整 : チューナー : ネットワーク Morphism (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/28/2020 (1.6.0)

* 本ページは、NNI の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

自動調整 : チューナー : ネットワーク Morphism

1. イントロダクション

Autokeras はネットワーク Morphism を利用するポピュラーな autoML ツールです。Autokeras の基本的なアイデアはニューラルネットワーク・アーキテクチャのメトリックを推定するために Bayesian 回帰を利用することです。毎回、それは father ネットワークから幾つかの child ネットワークを生成します。それからそれはネットワークの訓練結果の履歴からメトリック値とメトリック値ペアを推定するために naive Bayesian 回帰を利用します。次に、それは最善の、推定されたパフォーマンスを持つ child を選択してそれを訓練キューに追加します。Autokeras のワークにインスパイアされてその コード を参照し、私達は NNI プラットフォームでネットワーク Morphism 法を実装しました。

ネットワーク morphism トライアル使用方法についてより多く知ることを望むのであれば、Readme.md を見てください。

 

2. 使用方法

ネットワーク Morphism を使用するには、config.yml ファイルで以下の spec を変更するべきです :

tuner:
  #choice: NetworkMorphism
  builtinTunerName: NetworkMorphism
  classArgs:
    #choice: maximize, minimize
    optimize_mode: maximize
    #for now, this tuner only supports cv domain
    task: cv
    #modify to fit your input image width
    input_width: 32
    #modify to fit your input image channel
    input_channel: 3
    #modify to fit your number of classes
    n_output_node: 10

訓練手続きでは、それはネットワークグラフを表す JSON ファイルを生成します。ユーザはこの JSON ファイルから PyTorch or Keras モデルを構築するために “json_to_graph()” 関数を呼び出すことができます。

import nni
from nni.networkmorphism_tuner.graph import json_to_graph

def build_graph_from_json(ir_model_json):
    """build a pytorch model from json representation
    """
    graph = json_to_graph(ir_model_json)
    model = graph.produce_torch_model()
    return model

# trial get next parameter from network morphism tuner
RCV_CONFIG = nni.get_next_parameter()
# call the function to build pytorch model or keras model
net = build_graph_from_json(RCV_CONFIG)

# training procedure
# ....

# report the final accuracy to NNI
nni.report_final_result(best_acc)

最善のモデルをセーブしてロードすることを望む場合、以下のメソッドが勧められます。

# 1. Use NNI API
## You can get the best model ID from WebUI
## or `nni/experiments/experiment_id/log/model_path/best_model.txt'

## read the json string from model file and load it with NNI API
with open("best-model.json") as json_file:
    json_of_model = json_file.read()
model = build_graph_from_json(json_of_model)

# 2. Use Framework API (Related to Framework)
## 2.1 Keras API

## Save the model with Keras API in the trial code
## it's better to save model with id in nni local mode
model_id = nni.get_sequence_id()
## serialize model to JSON
model_json = model.to_json()
with open("model-{}.json".format(model_id), "w") as json_file:
    json_file.write(model_json)
## serialize weights to HDF5
model.save_weights("model-{}.h5".format(model_id))

## Load the model with Keras API if you want to reuse the model
## load json and create model
model_id = "" # id of the model you want to reuse
with open('model-{}.json'.format(model_id), 'r') as json_file:
    loaded_model_json = json_file.read()
loaded_model = model_from_json(loaded_model_json)
## load weights into new model
loaded_model.load_weights("model-{}.h5".format(model_id))

## 2.2 PyTorch API

## Save the model with PyTorch API in the trial code
model_id = nni.get_sequence_id()
torch.save(model, "model-{}.pt".format(model_id))

## Load the model with PyTorch API if you want to reuse the model
model_id = "" # id of the model you want to reuse
loaded_model = torch.load("model-{}.pt".format(model_id))

 

3. ファイル構造

チューナーは多くの様々なファイル、関数とクラスを持ちます。ここで、それらのファイルの多くに簡潔な紹介だけ与えます :

  • networkmorphism_tuner.py はネットワーク morphism テクニックを使用するチューナーです。
  • bayesian.py は既に探求したモデルに基づいて未知のモデルのメトリックを推定するための Bayesian 法です。
  • graph.py はメタグラフ・データ構造です。クラス Graph はモデルのニューラル・アーキテクチャ・グラフを表します。
    • グラフはモデルからニューラル・アーキテクチャ・グラフを抽出します。
    • グラフの各ノードは層間の中間 tensor です。
    • 各層はグラフのエッジです。
    • 特に、マルチエッジは同じ層を参照するかもしれません。
  • graph_transformer.py は幾つかのグラフ変換を含みます、これはグラフを拡大し、深くし、あるいはスキップ接続を追加します。
  • layers.py はモデルで使用する総ての層を含みます。
  • layer_transformer.py は幾つかの層変換を含みます、これは層を拡大し、深くし、あるいはスキップ接続を追加します。
  • nn.py は初期ネットワークを生成するクラスを含みます。
  • metric.py Accuracy と MSE を含む幾つかのメトリッククラス。
  • utils.py は Keras を使用する、cifar10 データセットのためのサンプル探索ネットワーク・アーキテクチャです。

 

4. ネットワーク表現 Json サンプル

ここに私達が定義した中間表現 JSON ファイルのサンプルがあります、これはアーキテクチャ探索手続きでチューナーからトライアルに渡されます。ユーザはこの JSON ファイルから PyTorch か Keras モデルを構築するためにトライアルコードで “json_to_graph()” 関数を呼び出すことができます。

{
     "input_shape": [32, 32, 3],
     "weighted": false,
     "operation_history": [],
     "layer_id_to_input_node_ids": {"0": [0],"1": [1],"2": [2],"3": [3],"4": [4],"5": [5],"6": [6],"7": [7],"8": [8],"9": [9],"10": [10],"11": [11],"12": [12],"13": [13],"14": [14],"15": [15],"16": [16]
     },
     "layer_id_to_output_node_ids": {"0": [1],"1": [2],"2": [3],"3": [4],"4": [5],"5": [6],"6": [7],"7": [8],"8": [9],"9": [10],"10": [11],"11": [12],"12": [13],"13": [14],"14": [15],"15": [16],"16": [17]
     },
     "adj_list": {
         "0": [[1, 0]],
         "1": [[2, 1]],
         "2": [[3, 2]],
         "3": [[4, 3]],
         "4": [[5, 4]],
         "5": [[6, 5]],
         "6": [[7, 6]],
         "7": [[8, 7]],
         "8": [[9, 8]],
         "9": [[10, 9]],
         "10": [[11, 10]],
         "11": [[12, 11]],
         "12": [[13, 12]],
         "13": [[14, 13]],
         "14": [[15, 14]],
         "15": [[16, 15]],
         "16": [[17, 16]],
         "17": []
     },
     "reverse_adj_list": {
         "0": [],
         "1": [[0, 0]],
         "2": [[1, 1]],
         "3": [[2, 2]],
         "4": [[3, 3]],
         "5": [[4, 4]],
         "6": [[5, 5]],
         "7": [[6, 6]],
         "8": [[7, 7]],
         "9": [[8, 8]],
         "10": [[9, 9]],
         "11": [[10, 10]],
         "12": [[11, 11]],
         "13": [[12, 12]],
         "14": [[13, 13]],
         "15": [[14, 14]],
         "16": [[15, 15]],
         "17": [[16, 16]]
     },
     "node_list": [
         [0, [32, 32, 3]],
         [1, [32, 32, 3]],
         [2, [32, 32, 64]],
         [3, [32, 32, 64]],
         [4, [16, 16, 64]],
         [5, [16, 16, 64]],
         [6, [16, 16, 64]],
         [7, [16, 16, 64]],
         [8, [8, 8, 64]],
         [9, [8, 8, 64]],
         [10, [8, 8, 64]],
         [11, [8, 8, 64]],
         [12, [4, 4, 64]],
         [13, [64]],
         [14, [64]],
         [15, [64]],
         [16, [64]],
         [17, [10]]
     ],
     "layer_list": [
         [0, ["StubReLU", 0, 1]],
         [1, ["StubConv2d", 1, 2, 3, 64, 3]],
         [2, ["StubBatchNormalization2d", 2, 3, 64]],
         [3, ["StubPooling2d", 3, 4, 2, 2, 0]],
         [4, ["StubReLU", 4, 5]],
         [5, ["StubConv2d", 5, 6, 64, 64, 3]],
         [6, ["StubBatchNormalization2d", 6, 7, 64]],
         [7, ["StubPooling2d", 7, 8, 2, 2, 0]],
         [8, ["StubReLU", 8, 9]],
         [9, ["StubConv2d", 9, 10, 64, 64, 3]],
         [10, ["StubBatchNormalization2d", 10, 11, 64]],
         [11, ["StubPooling2d", 11, 12, 2, 2, 0]],
         [12, ["StubGlobalPooling2d", 12, 13]],
         [13, ["StubDropout2d", 13, 14, 0.25]],
         [14, ["StubDense", 14, 15, 64, 64]],
         [15, ["StubReLU", 15, 16]],
         [16, ["StubDense", 16, 17, 64, 10]]
     ]
 }

モデルを 有向非巡回グラフ として考えることができます。各モデルの定義は JSON オブジェクトです、そこでは :

(訳注: 定義の詳細は 原文 参照)

 

5. TODO

次のステップで、API を固定ネットワーク generator からより多くの利用可能な演算子を持つネットワーク generator に変更します。将来的に中間表現 spec として JSON の代わりに ONNX を後で使用します。

 

以上






AutoKeras 1.0 : Tutorials : 多様性データとマルチタスク

AutoKeras 1.0 : Tutorials : 多様性データとマルチタスク (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/22/2020

* 本ページは、AutoKeras の以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

Tutorials : 多様性データとマルチタスク

このチュートリアルでは多様性データとマルチタスクをどのように扱うかを示すために AutoModel API を利用しています。

 

多様性とは何でしょう?

多様性データは各データインスタンスが情報の複数の形式を持つことを意味します。例えば、写真は画像としてセーブできます。画像に加えて、それはまたいつどこでそれが撮られたかを属性として持つかもしれません、これは構造化データとして表わされることができます。

 

マルチタスクとは何でしょう?

ここで言及するマルチタスクは同じ入力特徴で複数のターゲットを予測することを望みます。例えば、画像をその内容に従って分類することを望むだけでなく、その質も 0 と 1 の間の浮動小数点数として回帰することも望みます。次の図は多様性 (データ) とマルチタスク・ニューラルネットワーク・モデルのサンプルを示します。

それは 2 つの入力 – 画像と構造化データを持ちます。各画像は構造化データの属性のセットと関連します。これらのデータから、分類ラベルと回帰値を同時に予測することを試みています。

 

データ準備

私達のアイデアを示すため、多様性データとして幾つかのランダム画像と構造化データを生成します。

num_instances = 100
# Generate image data.
image_data = np.random.rand(num_instances, 32, 32, 3).astype(np.float32)
# Generate structured data.
structured_data = np.random.rand(num_instances, 20).astype(np.float32)

分類と回帰のための幾つかのマルチタスク・ターゲットも生成します。

# Generate regression targets.
regression_target = np.random.rand(num_instances, 1).astype(np.float32)
# Generate classification labels of five classes.
classification_target = np.random.randint(5, size=num_instances)

 

モデルを構築して訓練する

それから AutoModel で多様なマルチタスク・モデルを初期化します。

import autokeras as ak
# Initialize the multi with multiple inputs and outputs.
model = ak.AutoModel(
    inputs=[ak.ImageInput(), ak.StructuredDataInput()],
    outputs=[
        ak.RegressionHead(metrics=['mae']),
        ak.ClassificationHead(loss='categorical_crossentropy', metrics=['accuracy'])
    ],
    max_trials=10)
# Fit the model with prepared data.
model.fit(
    [image_data, structured_data],
    [regression_target, classification_target],
    epochs=10)

 

検証データ

デフォルトでは、AutoKeras は検証データとして訓練データの最後の 20% を使用します。下のサンプルで示されるように、パーセンテージを指定するために validation_split を使用できます。

model.fit(
    [image_data, structured_data],
    [regression_target, classification_target],
    # Split the training data and use the last 15% as validation data.
    validation_split=0.15)

validation_deta で訓練データからそれを分割する代わりに貴方自身の検証セットを使用することもできます。

split = 20

image_val = image_data[split:]
structured_val = structured_data[split:]
regression_val = regression_target[split:]
classification_val = classification_target[split:]

image_data = image_data[:split]
structured_data = structured_data[:split]
regression_target = regression_target[:split]
classification_target = classification_target[:split]

model.fit(x_train,
          y_train,
          # Use your own validation set.
          validation_data=(x_val, y_val))

 

カスタマイズされた探索空間

探索空間をカスタマイズできます。次の図は定義することを望む探索空間を示します。

import autokeras as ak

input_node1 = ak.ImageInput()
output_node = ak.Normalization()(input_node1)
output_node = ak.ImageAugmentation()(output_node)
output_node1 = ak.ConvBlock()(output_node)
output_node2 = ak.ResNetBlock(version='v2')(output_node)
output_node1 = ak.Merge()([output_node1, output_node2])

input_node2 = ak.StructuredDataInput()
output_node = ak.CategoricalToNumerical()(input_node2)
output_node2 = ak.DenseBlock()(output_node)

output_node = ak.Merge()([output_node1, output_node2])
output_node1 = ak.ClassificationHead()(output_node)
output_node2 = ak.RegressionHead()(output_node)

auto_model = ak.AutoModel(
    inputs=[input_node1, input_node2], 
    outputs=[]output_node1, output_node2],
    max_trials=10)

 

データ形式

データの異なるタイプの形式について、ImageInput, StructuredDataInput, TextInput, RegressionHead, ClassificationHead のドキュメントを参照できます。

 

以上






AutoKeras 1.0 : Tutorials : 構造化データ分類

AutoKeras 1.0 : Tutorials : 構造化データ分類 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/22/2020

* 本ページは、AutoKeras の以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

Tutorials : 構造化データ分類

単純なサンプル

最初のステップはデータを準備することです。ここではサンプルとして タイタニック・データセット を使用します。CSV ファイルを ここ でダウンロードできます。

2 番目のステップは StructuredDataClassifier を実行することです。総ての /path/to を csv ファイルへのパスで置き換えてください。

import autokeras as ak

# Initialize the structured data classifier.
clf = ak.StructuredDataClassifier(max_trials=10) # It tries 10 different models.
# Feed the structured data classifier with training data.
clf.fit(
    # The path to the train.csv file.
    '/path/to/train.csv',
    # The name of the label column.
    'survived')
# Predict with the best model.
predicted_y = clf.predict('/path/to/eval.csv')
# Evaluate the best model with testing data.
print(clf.evaluate('/path/to/eval.csv', 'survived'))

 

データ形式

AutoKeras StructuredDataClassifier はデータ形式について非常に柔軟です。

上のサンプルは CSV ファイルをどのように直接使用するかを示します。CSV ファイルに加えて、それはまた numpy.ndarray, pandas.DataFrame あるいは tf.data.Dataset もサポートします。データは数値かカテゴリカル値を持つ 2-次元であるべきです。

分類ラベルについては、AutoKeras は plain ラベル, i.e. 文字列か整数、そして one-hot エンコードラベル, i.e. 0 と 1 のベクトルの両者を受け取ります。ラベルは numpy.ndarray, pandas.DataFrame か pandas.Series であり得ます。

次のサンプルは numpy.ndarray, pandas.DataFrame と tensorflow.data.Dataset でデータがどのように準備できるかを示します。

import pandas as pd
# x_train as pandas.DataFrame, y_train as pandas.Series
x_train = pd.read_csv('train.csv')
print(type(x_train)) # pandas.DataFrame
y_train = x_train.pop('survived')
print(type(y_train)) # pandas.Series

# You can also use pandas.DataFrame for y_train.
y_train = pd.DataFrame(y_train)
print(type(y_train)) # pandas.DataFrame

# You can also use numpy.ndarray for x_train and y_train.
x_train = x_train.to_numpy()
y_train = y_train.to_numpy()
print(type(x_train)) # numpy.ndarray
print(type(y_train)) # numpy.ndarray

# Preparing testing data.
x_test = pd.read_csv('eval.csv')
y_test = x_test.pop('survived')

# It tries 10 different models.
clf = ak.StructuredDataClassifier(max_trials=10)
# Feed the structured data classifier with training data.
clf.fit(x_train, y_train)
# Predict with the best model.
predicted_y = clf.predict(x_test)
# Evaluate the best model with testing data.
print(clf.evaluate(x_test, y_test))

次のコードは numpy.ndarray をどのように tf.data.Dataset に変換するかを示します。特に、ラベルは tensorflow Dataset にラップされるためにマルチクラス分類のため one-hot エンコードされなければなりません。タイタニック・データセットは二値分類ですので、それは one-hot エンコードされるべきではありません。

import tensorflow as tf
train_set = tf.data.Dataset.from_tensor_slices(((x_train, ), (y_train, )))
test_set = tf.data.Dataset.from_tensor_slices(((x_test, ), (y_test, )))

clf = ak.StructuredDataClassifier(max_trials=10)
# Feed the tensorflow Dataset to the classifier.
clf.fit(train_set)
# Predict with the best model.
predicted_y = clf.predict(test_set)
# Evaluate the best model with testing data.
print(clf.evaluate(test_set))

次のようにデータのためにカラム名とタイプを指定することもできます。訓練データが既にカラム名を持つ場合には, e.g. pandas.DataFrame, CSV ファイル、column_names はオプションです。タイプが指定されない任意のカラムは訓練データから推論されます。

# Initialize the structured data classifier.
clf = ak.StructuredDataClassifier(
    column_names=[
        'sex',
        'age',
        'n_siblings_spouses',
        'parch',
        'fare',
        'class',
        'deck',
        'embark_town',
        'alone'],
    column_types={'sex': 'categorical', 'fare': 'numerical'},
    max_trials=10, # It tries 10 different models.
)

 

検証データ

デフォルトでは、AutoKeras は検証データとして訓練データの最後の 20% を使用します。下のサンプルで示されるように、パーセンテージを指定するために validation_split を使用できます。

clf.fit(x_train,
        y_train,
        # Split the training data and use the last 15% as validation data.
        validation_split=0.15)

それを訓練データから validation_data で分割する代わりに貴方自身の検証セットを使用することもできます。

split = 500
x_val = x_train[split:]
y_val = y_train[split:]
x_train = x_train[:split]
y_train = y_train[:split]
clf.fit(x_train,
        y_train,
        # Use your own validation set.
        validation_data=(x_val, y_val))

 

カスタマイズされた検索空間

上級ユーザのために、StructuredDataClassifier の代わりに AutoModel を使用して探索空間をカスタマイズしても良いです。幾つかの高位設定のために StructuredDataBlock を設定できます、e.g., CategoricalToNumerical を使用するか否かのために categorical_encoding。これらの引数を指定しないこともできます、これは種々の選択を自動的に調整されるようにするでしょう。詳細のために次のサンプルを見てください。

import autokeras as ak

input_node = ak.StructuredDataInput()
output_node = ak.StructuredDataBlock(
    categorical_encoding=True,
    block_type='dense')(input_node)
output_node = ak.ClassificationHead()(output_node)
clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=10)
clf.fit(x_train, y_train)

AutoModel の利用方法は Keras の functional API に類似しています。基本的には、グラフを構築しています、そのエッジはブロックでノードはブロックの中間出力です。output_node = ak.[some_block]([block_args])(input_node) で input_node から output_node へのエッジを追加します。

更に探索空間をカスタマイズするためにより極め細かいブロックを利用することもまた可能です。次のサンプルを見てください。

import autokeras as ak

input_node = ak.StructuredDataInput()
output_node = ak.CategoricalToNumerical()(input_node)
output_node = ak.DenseBlock()(output_node)
output_node = ak.ClassificationHead()(output_node)
clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=10)
clf.fit(x_train, y_train)
 

以上






AutoKeras 1.0 : Tutorials : テキスト分類

AutoKeras 1.0 : Tutorials : テキスト分類 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/21/2020

* 本ページは、AutoKeras の以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

Tutorials : テキスト分類

単純なサンプル

最初のステップは貴方のデータを準備することです。ここではサンプルとして IMDB データセット を使用します。

import numpy as np
from tensorflow.keras.datasets import imdb

# Load the integer sequence the IMDB dataset with Keras.
index_offset = 3  # word index offset
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=1000,
                                                      index_from=index_offset)
y_train = y_train.reshape(-1, 1)
y_test = y_test.reshape(-1, 1)
# Prepare the dictionary of index to word.
word_to_id = imdb.get_word_index()
word_to_id = {k: (v + index_offset) for k, v in word_to_id.items()}
word_to_id[""] = 0
word_to_id[""] = 1
word_to_id[""] = 2
id_to_word = {value: key for key, value in word_to_id.items()}
# Convert the word indices to words.
x_train = list(map(lambda sentence: ' '.join(
    id_to_word[i] for i in sentence), x_train))
x_test = list(map(lambda sentence: ' '.join(
    id_to_word[i] for i in sentence), x_test))
x_train = np.array(x_train, dtype=np.str)
x_test = np.array(x_test, dtype=np.str)
print(x_train.shape)  # (25000,)
print(y_train.shape)  # (25000, 1)
print(x_train[0][:50])  #  this film was just brilliant casting 

2 番目のステップは TextClassifier を実行することです。

import autokeras as ak

# Initialize the text classifier.
clf = ak.TextClassifier(max_trials=10) # It tries 10 different models.
# Feed the text classifier with training data.
clf.fit(x_train, y_train)
# Predict with the best model.
predicted_y = clf.predict(x_test)
# Evaluate the best model with testing data.
print(clf.evaluate(x_test, y_test))

 

検証データ

デフォルトでは、AutoKeras は訓練データの最後の 20% を検証データとして使用します。下のサンプルで示されるように、パーセンテージを指定するために validation_split を使用できます。

clf.fit(x_train,
        y_train,
        # Split the training data and use the last 15% as validation data.
        validation_split=0.15)

それを訓練データから分割する代わりに、validation_data で貴方自身の検証セットを使用することもできます。

split = 5000
x_val = x_train[split:]
y_val = y_train[split:]
x_train = x_train[:split]
y_train = y_train[:split]
clf.fit(x_train,
        y_train,
        # Use your own validation set.
        validation_data=(x_val, y_val))

 

カスタマイズされた探索空間

上級ユーザのために、TextClassifier の代わりに AutoModel を使用して探索空間をカスタマイズしても良いです。幾つかの高位設定のために TextBlock を設定することができます、e.g., 使用するテキストベクトル化方法のタイプのための vectorizer。’sequence’ を使用できます、これは単語を整数に変換するために TextToInteSequence を使用して整数シークエンスを埋め込むために Embedding を使用します、あるいは ‘ngram’ を使用できます、これはセンテンスをベクトル化するために TextToNgramVector を使用します。これらの引数を指定しないこともできます、これは異なる選択が自動的に調整されるようにするでしょう。詳細のために次のサンプルを見てください。

import autokeras as ak

input_node = ak.TextInput()
output_node = ak.TextBlock(vectorizer='ngram')(input_node)
output_node = ak.ClassificationHead()(output_node)
clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=10)
clf.fit(x_train, y_train)

AutoModel の利用方法は Keras の functional API に類似しています。基本的には、グラフを構築しています、そのエッジはブロックでノードはブロックの中間出力です。output_node = ak.[some_block]([block_args])(input_node) で input_node から output_node へのエッジを追加します。

更に探索空間をカスタマイズするためにより極め細かいブロックを利用することもまた可能です。次のサンプルを見てください。

import autokeras as ak

input_node = ak.TextInput()
output_node = ak.TextToIntSequence()(input_node)
output_node = ak.Embedding()(output_node)
# Use separable Conv layers in Keras.
output_node = ak.ConvBlock(separable=True)(output_node)
output_node = ak.ClassificationHead()(output_node)
clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=10)
clf.fit(x_train, y_train)

 

データ形式

AutoKeras TextClassifier はデータ形式について非常に柔軟です。

テキストについて、入力データは分類ラベルのために 1-次元であるべきです。AutoKeras は plain ラベル, i.e. 文字列か整数、そして one-hot エンコードラベル, i.e. 0 と 1 のベクトルの両者を受け取ります。

訓練データのために tf.data.Dataset 形式の使用もサポートします。ラベルは tensorflow Dataset にラップされるためマルチクラス分類のために one-hot エンコードでなければなりません。IMDB データセットは二値分類ですので、それは one-hot エンコードされるべきではありません。

import tensorflow as tf
train_set = tf.data.Dataset.from_tensor_slices(((x_train, ), (y_train, )))
test_set = tf.data.Dataset.from_tensor_slices(((x_test, ), (y_test, )))

clf = ak.TextClassifier(max_trials=10)
# Feed the tensorflow Dataset to the classifier.
clf.fit(train_set)
# Predict with the best model.
predicted_y = clf.predict(test_set)
# Evaluate the best model with testing data.
print(clf.evaluate(test_set))
 

以上






AutoKeras 1.0 : Tutorials : 画像分類

AutoKeras 1.0 : Tutorials : 画像分類 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/21/2020

* 本ページは、AutoKeras の以下のページを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

Tutorials : 画像分類

単純なサンプル

最初のステップはデータを準備することです。ここではサンプルとして MNIST データセットを使用します。

from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
print(x_train.shape) # (60000, 28, 28)
print(y_train.shape) # (60000,)
print(y_train[:3]) # array([7, 2, 1], dtype=uint8)

2 番目のステップは ImageClassifier を実行します。

import autokeras as ak

# Initialize the image classifier.
clf = ak.ImageClassifier(max_trials=1) # It tries 10 different models.
# Feed the image classifier with training data.
clf.fit(x_train, y_train,epochs=3)
# Predict with the best model.
predicted_y = clf.predict(x_test)
print(predicted_y)
# Evaluate the best model with testing data.
print(clf.evaluate(x_test, y_test))

 

検証データ

デフォルトでは、AutoKeras は訓練データの最後の 20% を検証データとして使用します。下のサンプルで示されるように、パーセンテージを指定するために validation_split を使用できます。

clf.fit(x_train,
        y_train,
        # Split the training data and use the last 15% as validation data.
        validation_split=0.15,epochs=3)

それを訓練データから分割する代わりに、validation_data で貴方自身の検証セットを使用することもできます。

split = 50000
x_val = x_train[split:]
y_val = y_train[split:]
x_train = x_train[:split]
y_train = y_train[:split]
clf.fit(x_train,
        y_train,
        # Use your own validation set.
        validation_data=(x_val, y_val),epochs=3)

 

カスタマイズされた探索空間

上級ユーザのために、ImageClassifier の代わりに AutoModel を使用して探索空間をカスタマイズしても良いです。幾つかの高位設定のために ImageBlock を設定することができます、e.g., 探索するニューラルネットワークのタイプのための block_type、データ正規化を行なうか否かのための normlize、データ増強を行なうか否かのための augment。これらの引数を指定しないこともできます、これは異なる選択が自動的に調整されるようにするでしょう。詳細のために次のサンプルを見てください。

import autokeras as ak

input_node = ak.ImageInput()
output_node = ak.ImageBlock(
    # Only search ResNet architectures.
    block_type='resnet',
    # Normalize the dataset.
    normalize=True,
    # Do not do data augmentation.
    augment=False)(input_node)
output_node = ak.ClassificationHead()(output_node)
clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=10)
clf.fit(x_train, y_train,epochs=3)

AutoModel の利用方法は Keras の functional API に類似しています。基本的には、グラフを構築しています、そのエッジはブロックでノードはブロックの中間出力です。output_node = ak.some_block(input_node) で input_node から output_node へのエッジを追加します。

更に探索空間をカスタマイズするためにより極め細かいブロックを利用することもまた可能です。次のサンプルを見てください。

import autokeras as ak

input_node = ak.ImageInput()
output_node = ak.Normalization()(input_node)
output_node = ak.ImageAugmentation(percentage=0.3)(output_node)
output_node = ak.ResNetBlock(version='v2')(output_node)
output_node = ak.ClassificationHead()(output_node)
clf = ak.AutoModel(inputs=input_node, outputs=output_node, max_trials=10)
clf.fit(x_train, y_train,epochs=3)

 

データ形式

AutoKeras ImageClassifier はデータ形式について非常に柔軟です。画像については、それはチャネル次元ありとなしの両者のデータ形式を受け取ります。MNIST データセットの画像はチャネル次元を持ちません。各画像は shape (28, 28) の行列です。AutoKeras はまたチャネル次元を最後に持つ, e.g., (32, 32, 3), (28, 28, 1)、3 つの次元の画像も受け取ります。

分類ラベルについては、AutoKeras は plain ラベル, i.e. 文字列か整数、そして one-hot エンコードラベル, i.e. 0 と 1 のベクトルの両者を受け取ります。

そのため次の方法で貴方のデータを準備すれば、ImageClassifier は依然として動作するはずです。

from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# Reshape the images to have the channel dimension.
x_train = x_train.reshape(x_train.shape + (1,))
x_test = x_test.reshape(x_test.shape + (1,))

# One-hot encode the labels.
import numpy as np
eye = np.eye(10)
y_train = eye[y_train]
y_test = eye[y_test]

print(x_train.shape) # (60000, 28, 28, 1)
print(y_train.shape) # (60000, 10)
print(y_train[:3])
# array([[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
#        [1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
#        [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]])

訓練データのために tf.data.Dataset 形式を使用することもサポートします。この場合、画像は 3-次元でなければならないでしょう。ラベルは tensorflow Dataset 内にラップされるためマルチクラス分類のために one-hot エンコードされなければなりません。

import tensorflow as tf
from tensorflow.python.keras.utils.data_utils import Sequence
train_set = tf.data.Dataset.from_tensor_slices(((x_train, ), (y_train, )))
test_set = tf.data.Dataset.from_tensor_slices(((x_test, ), (y_test, )))

clf = ak.ImageClassifier(max_trials=10)
# Feed the tensorflow Dataset to the classifier.
clf.fit(train_set)
# Predict with the best model.
predicted_y = clf.predict(test_set)
# Evaluate the best model with testing data.
print(clf.evaluate(test_set))
 

以上






AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com