トレーニングの共通データ形式 - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

トレーニングの共通データ形式

トレーニングデータを準備するために、、AWSサービス、AWS Glue、Amazon EMR、Amazon Redshift、Amazon Relational Database Service、Amazon Athena 事前処理の後、データを Amazon S3 バケットに発行します。トレーニングのために、データに次の一連の変換と変化を行う必要があります。

  • トレーニングデータのシリアル化 (ユーザーによる処理)

  • トレーニングデータの逆シリアル化 (アルゴリズムによる処理)

  • トレーニングモデルのシリアル化 (アルゴリズムによる処理)

  • トレーニング済みモデルの逆シリアル化 (オプション、ユーザーによる処理)

アルゴリズムのトレーニングの部分で Amazon SageMaker を使用する場合は、必ずすべてのデータを一度にアップロードします。その場所により多くのデータが追加された場合は、新しいモデルを構築するために、新しいトレーニングの呼び出しが必要になります。

組み込みアルゴリズムでサポートされるコンテンツタイプ

次の表は、一般的にサポートされている ContentType値とそれらを使用するアルゴリズムを以下に示します。

組み込みアルゴリズムのコンテンツタイプ
ContentType Algorithm
アプリケーション/x-image オブジェクト検出アルゴリズム、セマンティックセグメンテーション
アプリケーション/x-recordio

オブジェクト検出アルゴリズム

application/x-recordio-protobuf

因数分解マシン, K-平均, K-NN, 潜伏ディリクレ割当て, 線形学習者, NTM, PCA, RCF, 配列間配列

アプリケーション/jsonlines

BlazingText、Deepar

イメージ/JPEG

オブジェクト検出アルゴリズム、セマンティックセグメンテーション

画像/ng

オブジェクト検出アルゴリズム、セマンティックセグメンテーション

text/csv

IPインサイト, K-means, k-nn, 潜伏ディリクレ割り当て, 線形学習者, NTM, PCA, RCF, XGBoost

text/libsvm

XGBoost

各アルゴリズムで使用されるパラメータの要約については、個々のアルゴリズムのドキュメントまたはこのテーブル

パイプモードを使用する

Eclipseパイプモードトレーニングジョブは、Amazon Simple Storage Service (Amazon S3) から直接データをストリーミングします。ストリーミングにより、トレーニングジョブの開始時間が短縮され、スループットが向上します。これはとは対照的ですファイルモードで、Amazon S3 からのデータがトレーニングインスタンスボリュームに保存されます。ファイルモードでは、ディスク容量を使用して、最終的なモデルアーティファクトと完全なトレーニングデータセットの両方を保存します。パイプモードで Amazon S3 から直接データをストリーミングすることで、トレーニングインスタンスの Amazon Elastic Block Store ボリュームのサイズを縮小できます。パイプモードでは、最終的なモデルアーティファクトを保存するのに十分なディスク容量が必要です。トレーニング入力モードの詳細については、「AlgorithmSpecification」を参照してください。

CSV 形式の使用

多くの Amazon SageMaker アルゴリズムは、CSV 形式のデータによるトレーニングをサポートしています。CSV形式のデータをトレーニングに使用するには、入力データチャネル仕様でtext/csvとして ContentType。Amazon SageMaker では、CSV ファイルにヘッダーレコードがないことが必要です。また、ターゲット変数が最初の列にあることが必要です。ターゲットが設定されていない教師なし学習アルゴリズムを実行するには、コンテンツタイプでラベル列の数を指定します。たとえば、この場合は 'content_type=text/csv;label_size=0' と指定します。CSV 形式を使用するノートブックの例については、乳がん予測。詳細については、「」を参照してください。CSV データセットでパイプモードを使用し、Amazon SageMaker 組み込みアルゴリズムのトレーニングを迅速に行えるようになりました

RecordIO 形式の使用

protobuf recordIO 形式では、SageMaker はデータセット内の各観測値を 4 バイトの浮動小数点数のセットとしてのバイナリ表現に変換し、それを protobuf の値フィールドにロードします。データの準備に Python を使用している場合は、これらの既存の変換を使用することを強くお勧めします。ただし、他の言語を使用している場合は、以下の protobuf 定義ファイルに、データを SageMaker の protobuf 形式に変換するために使用するスキーマが含まれています。

注記

一般的に使用される NumPy 配列を protobuf recordIO 形式に変換する方法を示す例については、MNISTを用いた因数分解機入門

syntax = "proto2"; package aialgs.data; option java_package = "com.amazonaws.aialgorithms.proto"; option java_outer_classname = "RecordProtos"; // A sparse or dense rank-R tensor that stores data as doubles (float64). message Float32Tensor { // Each value in the vector. If keys is empty, this is treated as a // dense vector. repeated float values = 1 [packed = true]; // If key is not empty, the vector is treated as sparse, with // each key specifying the location of the value in the sparse vector. repeated uint64 keys = 2 [packed = true]; // An optional shape that allows the vector to represent a matrix. // For example, if shape = [ 10, 20 ], floor(keys[i] / 20) gives the row, // and keys[i] % 20 gives the column. // This also supports n-dimensonal tensors. // Note: If the tensor is sparse, you must specify this value. repeated uint64 shape = 3 [packed = true]; } // A sparse or dense rank-R tensor that stores data as doubles (float64). message Float64Tensor { // Each value in the vector. If keys is empty, this is treated as a // dense vector. repeated double values = 1 [packed = true]; // If this is not empty, the vector is treated as sparse, with // each key specifying the location of the value in the sparse vector. repeated uint64 keys = 2 [packed = true]; // An optional shape that allows the vector to represent a matrix. // For example, if shape = [ 10, 20 ], floor(keys[i] / 10) gives the row, // and keys[i] % 20 gives the column. // This also supports n-dimensonal tensors. // Note: If the tensor is sparse, you must specify this value. repeated uint64 shape = 3 [packed = true]; } // A sparse or dense rank-R tensor that stores data as 32-bit ints (int32). message Int32Tensor { // Each value in the vector. If keys is empty, this is treated as a // dense vector. repeated int32 values = 1 [packed = true]; // If this is not empty, the vector is treated as sparse with // each key specifying the location of the value in the sparse vector. repeated uint64 keys = 2 [packed = true]; // An optional shape that allows the vector to represent a matrix. // For Exmple, if shape = [ 10, 20 ], floor(keys[i] / 10) gives the row, // and keys[i] % 20 gives the column. // This also supports n-dimensonal tensors. // Note: If the tensor is sparse, you must specify this value. repeated uint64 shape = 3 [packed = true]; } // Support for storing binary data for parsing in other ways (such as JPEG/etc). // This is an example of another type of value and may not immediately be supported. message Bytes { repeated bytes value = 1; // If the content type of the data is known, stores it. // This allows for the possibility of using decoders for common formats // in the future. optional string content_type = 2; } message Value { oneof value { // The numbering assumes the possible use of: // - float16, float128 // - int8, int16, int32 Float32Tensor float32_tensor = 2; Float64Tensor float64_tensor = 3; Int32Tensor int32_tensor = 7; Bytes bytes = 9; } } message Record { // Map from the name of the feature to the value. // // For vectors and libsvm-like datasets, // a single feature with the name `values` // should be specified. map<string, Value> features = 1; // An optional set of labels for this record. // Similar to the features field above, the key used for // generic scalar / vector labels should be 'values'. map<string, Value> label = 2; // A unique identifier for this record in the dataset. // // Whilst not necessary, this allows better // debugging where there are data issues. // // This is not used by the algorithm directly. optional string uid = 3; // Textual metadata describing the record. // // This may include JSON-serialized information // about the source of the record. // // This is not used by the algorithm directly. optional string metadata = 4; // An optional serialized JSON object that allows per-record // hyper-parameters/configuration/other information to be set. // // The meaning/interpretation of this field is defined by // the algorithm author and may not be supported. // // This is used to pass additional inference configuration // when batch inference is used (e.g. types of scores to return). optional string configuration = 5; }

プロトコルバッファを作成した後、Amazon SageMaker がアクセス可能な Amazon S3 の場所に保存して、InputDataConfigcreate_training_job

注記

すべての Amazon SageMaker アルゴリズムでは、ChannelNameInputDataConfigをに設定する必要があります。train。一部のアルゴリズムでも検証またはテスト input channels がサポートされています。これらは通常、ホールドアウトデータセットを使用してモデルのパフォーマンスを評価するために使用されます。ホールドアウトデータセットは、最初のトレーニングでは使用されませんが、モデルをさらに調整するために使用できます。

トレーニング済みモデルの逆シリアル化

Amazon SageMaker モデルは、で指定された S3 バケットの model.tar.gz として保存されます。OutputDataConfig S3OutputPathのパラメータcreate_training_jobを呼び出します。ホスティングモデルを作成しているときに、これらのほとんどのモデルアーティファクトを指定することができます。ノートブックインスタンスで開いて確認することもできます。model.tar.gz が解凍されると、model_algo-1 が含まれています。これは、シリアル化された Apache MXNet オブジェクトです。たとえば、次を使用して k-means モデルをメモリにロードし、表示します。

import mxnet as mx print(mx.ndarray.load('model_algo-1'))