Path: blob/master/site/ja/guide/keras/sequential_model.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Sequential モデル
MNIST モデルをビルドする
Sequential モデルの使用が適している場合
Sequential
モデルは、各レイヤーに** 1 つの入力テンソルと 1 つの出力テンソルのみがあるレイヤーのプレーンスタック**に適しています。
概略的には、以下のSequential
モデルを参照してください。
上記は次の関数と同じです。
以下の場合、Sequential モデルは適切ではありません。
モデルに複数の入力または複数の出力がある場合
レイヤーに複数の入力または複数の出力がある場合
レイヤーの共有を行う必要がある場合
非線形トポロジーが必要な場合(残差を用いた接続、複数の分岐点をもつモデルなど)
Sequential モデルの作成
レイヤーのリストを Sequential コンストラクタに渡すことにより、Sequential モデルを作成できます。
そのレイヤーには、layers
属性を介してアクセスできます。
また、add()
メソッドを使用して Sequential モデルを作成することもできます。
また、レイヤーを削除するには、 pop()
メソッドが対応します。Sequential モデルは、レイヤーのリストのように動作します。
また、Sequential コンストラクタは、Keras のレイヤーやモデルと同様に、name
引数を受け入れます。これは、セマンティックに意味のある命名で TensorBoard グラフに注釈を付けるのに役立ちます。
事前に入力形状を指定
一般的に、Keras のすべてのレイヤーは、重みを作成できるようにするために、入力の形状を知る必要があります。このようなレイヤーを作成する場合、当初は重みがありません。
重みの形状は入力の形状に依存するため、入力時に最初に呼び出されたときに重みが作成されます。
これは Sequential モデルでも同じです。入力形状なしで Sequential モデルをインスタンス化すると、重みがないために「構築」されません (model.weights
を呼び出すと、これを示すエラーが発生します)。重みは、モデルが最初に入力データを確認したときに作成されます。
モデルが「構築」されたら、そのsummary()
メソッドを呼び出して、その内容を表示できます。
ただし、Sequential モデルを段階的に構築する場合、その時点の出力形状を含め、それまでのモデルの概要を表示できると非常に便利です。 この場合、モデルにInput
オブジェクトを渡してモデルを開始し、最初から入力形状がわかるようにする必要があります。
Input
オブジェクトはレイヤーではないため、model.layers
の一部として表示されないことに注意してください。
簡単な代替手段として、最初のレイヤーにinput_shape
引数を渡すこともできます。
このような事前定義された入力形状で構築されたモデルは、常に (データが確認される前でも) 重みを持ち、常に定義された出力形状をもっています。
一般的に、Sequential モデルの入力形状がわかっている場合は、常に事前に指定しておくことをお勧めします。
一般的なデバッグワークフロー:add()
+ summary()
新しい Sequential アーキテクチャを構築する場合、add()
を使用して段階的にレイヤーを積み重ね、モデルの概要を頻繁に出力することをお勧めします。これにより、Conv2D
レイヤーとMaxPooling2D
レイヤーのスタックが画像特徴量マップをどのようにダウンサンプリングしているかを監視できます。
これは、非常に実用的なワークフローです。
モデルの準備ができたら
モデルアーキテクチャの準備ができたら、以下を行います。
モデルをトレーニング、評価し、推論を実行します。「トレーニングと組み込みループを使用した評価のガイド」をご覧ください。
モデルをディスクに保存して復元します。「シリアル化と保存のガイド」をご覧ください。
複数の GPU を活用してモデルを迅速にトレーニングします。「マルチ GPU と分散トレーニングのガイド」をご覧ください。
Sequential モデルによる特徴量の抽出
Sequential モデルが構築されると、Functional API モデルのように動作します。つまり、すべてのレイヤーにinput
およびoutput
属性があります。これらの属性を使用すると、Sequential モデルのすべての中間層の出力を抽出するモデルを迅速に作成したりできます。
以下の例では、1 つのレイヤーからのみ特徴量を抽出します。
Sequential モデルによる転移学習
転移学習では、モデルの最下層を凍結し、最上層のみをトレーニングします。転移学習の詳細については、転移学習のガイドを参照してください。
以下は、Sequential モデルを含む 2 つの一般的な転移学習の例です。
まず、Sequential モデルで、最後のレイヤーを除くすべてのレイヤーを凍結するとします。この場合、model.layers
を繰り返し処理し、最後のレイヤーを除く各レイヤーに layer.trainable = False
を設定します。 以下に例を示します。
もう 1 つの一般的な例は、Sequential モデルを使用して、事前にトレーニングされたモデルといくつかの新しく初期化された分類レイヤーをスタックすることです。以下に例を示します。
転移学習を行う場合、おそらくこれら 2 つのパターンを頻繁に使用されていることに気付くでしょう。
Sequential モデルについての説明は以上です。
Keras でのモデル構築の詳細については、以下を参照してください。