AutoKeras 1.0 : Tutorials : 多様性データとマルチタスク (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/22/2020
* 本ページは、AutoKeras の以下のページを翻訳した上で適宜、補足説明したものです:
- Getting Started : Multi-Modal and Multi-Task
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、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 のドキュメントを参照できます。
以上