AI Platform Training での組み込みアルゴリズムを使用したトレーニングでは、データセットを送信し、トレーニング コードを一切作成せずに、モデルをトレーニングできます。このページでは、TabNet 組み込みアルゴリズムの仕組みとその使用方法について説明します。
概要
この組み込みアルゴリズムでは、次のように前処理とトレーニングが行われます。
- 前処理: トレーニングで使用できるよう、AI Platform Training がカテゴリデータと数値データの混在を処理し、数値データセットのみにします。
- トレーニング: AI Platform Training は、指定したデータセットとモデル パラメータを使用して、TensorFlow のカスタム Estimator でトレーニングを行います。
制限事項
次の機能は、TabNet 組み込みアルゴリズムを使用したトレーニングではサポートされていません。
- マルチ GPU トレーニング。組み込みアルゴリズムによって使用される GPU は一度に 1 つだけです。1 台のマシンで複数の GPU を使用したトレーニングを行うには、トレーニング アプリケーションを作成する必要があります。マシンタイプの詳細については、こちらをご覧ください。
- TPU を使用するトレーニング。TPU を使用してトレーニングするには、トレーニング アプリケーションを作成する必要があります。詳しくは、TPU でトレーニング ジョブを実行する方法をご覧ください。
- 分散トレーニング。AI Platform Training で分散トレーニング ジョブを実行するには、トレーニング アプリケーションを作成する必要があります。
サポートされているマシンタイプ
次の AI Platform Training スケール階層とマシンタイプがサポートされています。
BASIC
スケール階層- AI Platform Training でサポートされている Compute Engine マシンタイプの
CUSTOM
スケール階層 - 次のいずれかの以前のマシンタイプを持つ
CUSTOM
スケール階層:standard
large_model
complex_model_s
complex_model_m
complex_model_l
standard_gpu
standard_p100
standard_v100
large_model_v100
入力データのフォーマット
データセットでは、各行が 1 つのインスタンスを表し、各列が特徴値を表します。ターゲット列は予測対象の値を表します。
CSV ファイルを準備する
入力データは UTF-8 でエンコードされた CSV ファイルでなければなりません。トレーニング データがカテゴリ値と数値のみで構成されている場合は、Google の前処理モジュールを使用して欠損している数値を埋め、データセットを分割し、欠損値が 10% を超える行を削除できます。それ以外の場合は、自動前処理を有効にせずにトレーニングを行うことができます。
入力 CSV ファイルを準備する際、以下の要件を守ってください。
- ヘッダー行を削除する。ヘッダー行には各列のラベルが含まれています。ヘッダー行がトレーニング データの一部として残りのデータ インスタンスと一緒に送信されないようにするため、ヘッダー行を削除します。
- 1 列目をターゲット列にする。ターゲット列に予測対象の値が含まれています。分類アルゴリズムの場合、ターゲット列の値はすべてクラスまたはカテゴリにします。回帰アルゴリズムの場合、ターゲット列の値はすべて数値にします。
整数値を処理する
整数値の意味があいまいになると、自動前処理で整数値の列に問題が生じることがあります。AI Platform Training は、整数値の処理方法を自動的に決定します。デフォルトでの設定:
- すべての整数値が一意である場合、列はインスタンス キーとして扱われます。
- 一意の整数値が少ない場合、列はカテゴリとして扱われます。
- それ以外の場合、列の値は浮動小数点数に変換され、数値として扱われます。
これらのデフォルトの決定をオーバーライドするには:
- データを数値として扱う場合は、列内のすべての整数値を浮動小数点に変換します。例: {101.0, 102.0, 103.0}
- データをカテゴリとして扱う場合は、列内のすべての整数値の前に数値以外の接頭辞を追加します。例: {code_101, code_102, code_103}
TabNet トレーニング ジョブを送信する
このセクションでは、TabNet 組み込みアルゴリズムを使用したトレーニング ジョブを送信する方法を説明します。
各ハイパーパラメータの簡単な説明については、Google Cloud コンソール内で確認できます。より包括的な説明については、TabNet 組み込みアルゴリズムのリファレンスをご覧ください。
Console
Google Cloud コンソールで AI Platform Training の [ジョブ] ページに移動します。
[新規トレーニング ジョブ] ボタンをクリックします。下に表示されたオプションから、[組み込みアルゴリズムによるトレーニング] をクリックします。
[新しいトレーニング ジョブの作成] ページで [TabNet] を選択し、[次へ] をクリックします。
使用可能なすべてのパラメータの詳細については、Google Cloud コンソールにあるリンクを参照するか、組み込み TabNet リファレンスをご覧ください。
gcloud
ジョブの環境変数を設定し、
[VALUES-IN-BRACKETS]
には実際に使用する値を入力します。# Specify the name of the Cloud Storage bucket where you want your # training outputs to be stored, and the Docker container for # your built-in algorithm selection. BUCKET_NAME='[YOUR-BUCKET-NAME]' IMAGE_URI='gcr.io/cloud-ml-algos/tab_net:latest' # Specify the Cloud Storage path to your training input data. TRAINING_DATA='gs://[YOUR_BUCKET_NAME]/[YOUR_FILE_NAME].csv' DATASET_NAME='census' ALGORITHM='tabnet' MODEL_TYPE='classification' DATE='date '+%Y%m%d_%H%M%S'' MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}" JOB_ID="${MODEL_NAME}_${DATE}" JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${MODEL_NAME}/${DATE}"
gcloud ai-platform jobs training submit
を使用してトレーニング ジョブを送信します。gcloud ai-platform jobs submit training $JOB_ID \ --master-image-uri=$IMAGE_URI --scale-tier=BASIC \ --job-dir=$JOB_DIR \ -- \ --max_steps=2000 \ --preprocess \ --model_type=$MODEL_TYPE \ --batch_size=4096 \ --learning_rate=0.01 \ --training_data_path=$TRAINING_DATA_PATH
gcloud
でログを確認して、トレーニング ジョブのステータスをモニタリングします。gcloud ai-platform jobs describe
とgcloud ai-platform jobs stream-logs
を参照します。gcloud ai-platform jobs describe ${JOB_ID} gcloud ai-platform jobs stream-logs ${JOB_ID}
前処理の仕組み
自動前処理は、カテゴリデータと数値データに対して機能します。前処理ルーチンは、まずデータを分析してからデータを変換します。
分析
まず、AI Platform Training は各列のデータ型を自動的に検出し、各列をどのように扱うべきかを判断して、列のデータの統計情報を計算します。この情報は、metadata.json
ファイルに取り込まれます。
次に、ターゲット列の型を分析して、指定されたデータセットが回帰用か分類用かを識別します。この分析が model_type
の設定値と矛盾するとエラーになります。あいまいな場合はデータを明確にフォーマットすることで、ターゲット列をどのように扱うべきかを明示してください。
型: 列は数値とカテゴリのどちらかになります。
扱い方: AI Platform Training は、各列の扱い方を次のように識別します。
- すべての行に単一の値が含まれる列は、定数として扱われます。
- 列がカテゴリ型で、すべての行に一意の値が含まれている場合は、行識別子として扱われます。
- 列が浮動小数点の数値型である場合、または整数の数値型で多数の一意の値が含まれる場合、その列は数値として扱われます。
- 列が整数値の数値型で、一意の値の数が十分でない場合、その列は整数値が ID または語彙を表すカテゴリ列として扱われます。
- 列にある「一意の値の数が十分でない」とみなされるのは、列に含まれる一意の値の数が入力データセットの行数の 20% 未満の場合です。
- 列がカーディナリティの高いカテゴリ型である場合、その列はハッシュとして扱われます。ハッシュ バケットの数は、列にある一意の値の数の平方根と等しくなります。
- カテゴリ列の「カーディナリティが高い」とみなされるのは、列に含まれる一意の値の数がデータセットの行数の平方根より多い場合です。
- 列がカテゴリ型で、一意の値の数がデータセットの行数の平方根以下である場合、その列は、語彙を表す通常のカテゴリ列として扱われます。
統計情報: 識別された列の型と扱い方に基づいて、後の段階で列を変換するために使用される以下の統計情報が計算されます。
- 列が数値型の場合、平均値と分散値が計算されます。
- 列がカテゴリ型で、ID または語彙として扱われる場合は、列から一意の値が抽出されます。
- 列がカテゴリ型で、ハッシュとして扱われる場合は、列のカーディナリティに基づくハッシュ バケットの数が計算されます。
変換
データセットの初期分析が完了すると、データセットに適用された型、扱い方、統計情報に基づいてデータが変換されます。変換は以下の順に行われます。
- 分割の割合が指定されている場合は、トレーニング データセットを検証データセットとテスト データセットに分割します。
- 特徴の欠損が 10% を超える行を削除します。
- 列の平均値を使用して、欠損している数値を埋めます。
変換の例
欠損値が 10% を超える行は削除されます。次の例では、行に 10 個の値があると仮定します。各サンプル行は、わかりやすくするために一部の値を省略しています。
行の問題 | 元の値 | 変換後の値 | 説明 |
---|---|---|---|
欠損値のないサンプル行 | [3, 0.45, ..., 'fruits', 0, 1] |
[3, 0.45, ..., 1, 0, 0, 0, 1] |
文字列「fruits」はワンホット エンコーディングで値「1, 0, 0」に変換されます。これは後に TensorFlow グラフで行われます。 |
欠損値が多すぎる | [3, 0.45, ..., 'fruits', __, __] |
行が削除される | 行の 10% を超える値が欠損しています。 |
数値が欠損している | [3, 0.45, ..., 'fruits', 0, __] |
[3, 0.45, ..., 1, 0, 0, 0, 0.54] |
|
カテゴリ値が欠損している | [3, 0.45, ..., __, 0, 1] |
[3, 0.45, ..., 0, 0, 0, 0, 1] |
|
特徴列
変換中に列は加工されません。代わりに、分析中に生成されたメタデータは AI Platform Training に渡され、それに応じて特徴列が作成されます。
列の型 | 列の扱い方 | 作成される特徴列 |
---|---|---|
数値 | (すべての列の扱い方が適用される) |
tf.feature_column.numeric_column
平均値と分散値を使用して値が標準化されます。 |
カテゴリ | ID |
tf.feature_column.categorical_column_with_identity
|
カテゴリ | 語彙 |
tf.feature_column.categorical_column_with_vocabulary_list
|
カテゴリ | ハッシュ |
tf.feature_column.categorical_column_with_hash_bucket
|
カテゴリ | 定数または行識別子 | 無視されます。特徴列は作成されません。 |
自動前処理が完了すると、AI Platform Training は処理済みのデータセットを、ジョブ リクエストで指定した Cloud Storage バケット内のディレクトリにアップロードします。
その他の学習リソース
- TensorFlow の特徴列について学ぶ。