Path: blob/master/site/ja/tutorials/estimator/premade.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
事前作成された Estimator
まず最初に
始めるには、最初に TensorFlow と必要となる多数のライブラリをインポートします。
次に、Keras と Pandas を使用して、Iris データセットをダウンロードして解析します。トレーニング用とテスト用に別々のデータセットを維持することに注意してください。
データを検査し、4 つの浮動小数型の特徴量カラムと 1 つの int32 ラベルがあることを確認します。
各データセットに対し、モデルが予測するようにトレーニングされるラベルを分割します。
Estimator を使ったプログラミングの概要
データのセットアップが完了したので、TensorFlow Estimator を使ってモデルを定義できます。Estimator は、tf.estimator.Estimator
から派生したクラスです。TensorFlow は、一群の tf.estimator
(LinearRegressor
など)を提供しており、一般的な ML アルゴリズムを実装することができます。このほか、独自のカスタム Estimator を作成することもできますが、使用し始めには、事前作成済みの Estimator を使用することをお勧めします。
事前作成済みの Estimator に基づいて TensorFlow プログラムを記述するには、次のタスクを実行する必要があります。
1 つ以上の入力関数を作成する。
モデルの特徴量カラムを定義する。
Estimator をインスタンス化する。特徴量カラムとさまざまなハイパーパラメータを指定します。
Estimator オブジェクトに 1 つ以上のメソッドを呼び出す。データのソースとして適切な入力関数を渡します。
では、アヤメの分類において、これらのタスクをどのように実装するのか見てみましょう。
入力関数を自分で作成すれば、features
ディクショナリと label
リストを好みに合わせて生成できるようにすることができますが、あらゆる種類のデータを解析できる TensorFlow の Dataset API を使用することをお勧めします。
Dataset API は、多数の一般的な事例を処理することができます。たとえば、Dataset API を使用すると、大量のファイルのレコードを並列して読み取り、単一のストリームに結合することが簡単に行えます。
この例では事を単純にするために、pandas でデータを読み込み、このメモリ内のデータから入力パイプラインを構築します。
特徴量カラムを定義する
特徴量カラムは、特徴量ディクショナリの生の入力データを、モデルがどのように使用すべきかを説明するオブジェクトです。Estimator モデルを作成する際に、モデルが使用する各特徴量を説明する特徴量カラムをモデルに渡します。tf.feature_column
モジュールには、モデルに対してデータを表現するためのオプションが多数含まれています。
Iris については、4 つの生の特徴量は数値であるため、Estimator に対して、これら 4 つの各特徴量を 32 ビットの浮動小数点数型の値として表現するように命令する特徴量カラムを構築します。したがって、特徴カラムを作成するためのコードは、次のようになります。
特徴量カラムは、ここに示すものよりもはるかに高度なものに構築することができます。特徴量カラムの詳細については、こちらのガイドをご覧ください。
モデルが生の特徴量をどのように表現するかに関する記述を準備できたので、Estimator を構築することができます。
Estimator をインスタンス化する
アヤメの問題はよく知られた分類問題です。幸いにも、TensorFlow は、次のような事前作成済みの分類子 Estimator を複数用意しています。
tf.estimator.DNNClassifier
: 多クラス分類を実行するディープモデルに使用。tf.estimator.DNNLinearCombinedClassifier
: ワイド&ディープモデルに使用。tf.estimator.LinearClassifier
: 線形モデルに基づく分類子に使用。
アヤメの問題に関しては、tf.estimator.DNNClassifier
が最適な選択肢と言えます。この Estimator をインスタンス化する方法を次に示します。
トレーニングして評価して予測する
Estimator オブジェクトを準備したので、次の項目を行うメソッド呼び出すことができます。
モデルをトレーニングする。
トレーニングされたモデルを評価する。
トレーニングされたモデルを使用して、予測を立てる。
モデルをトレーニングする
次のように、Estimator の train
メソッドを呼び出して、モデルをトレーニングします。
Estimator が期待するとおり、引数を取らない入力関数を指定しながら、input_fn
呼び出しを lambda
にラッピングして引数をキャプチャするところに注意してください。steps
引数はメソッドに対して、あるトレーニングステップ数を完了した後にトレーニングを停止するように指定しています。
トレーニングされたモデルを評価する
モデルのトレーニングが完了したので、そのパフォーマンスに関する統計を得ることができます。次のコードブロックは、テストデータに対してトレーニングされたモデルの精度を評価します。
train
メソッドへの呼び出しとは異なり、評価するsteps
引数を渡していません。eval の input_fn
データの単一のエポックのみを返します。
eval_result
ディクショナリには、average_loss
(サンプル当たりの平均損失)、loss
(ミニバッチ当たりの平均損失)、および Estimator の global_step
の値(実行したトレーニングイテレーションの回数)も含まれます。
トレーニングされたモデルから予測(推論)を立てる
良質の評価結果を生み出すトレーニング済みのモデルを準備できました。これから、このトレーニング済みのモデルを使用し、ラベル付けできない測定に基づいてアヤメの品種を予測します。トレーニングと評価と同様に、単一の関数呼び出して予測を行います。
predict
メソッドは Python イテラブルを返し、各サンプルの予測結果のディクショナリを生成します。次のコードを使って、予測とその確率を出力します。