Deep-learning-with-keras-keras-creating-deep-learning-model

提供:Dev Guides
移動先:案内検索

深層学習モデルの作成

ニューラルネットワークモデルは、線形のレイヤースタックで構成されます。 そのようなモデルを定義するには、 Sequential 関数を呼び出します-

model = Sequential()

入力層

次のプログラムステートメントを使用して、ネットワークの最初のレイヤーである入力レイヤーを定義します-

model.add(Dense(512, input_shape=(784,)))

これにより、512のノード(ニューロン)と784の入力ノードを持つレイヤーが作成されます。 これは下の図に描かれています-

入力レイヤー

すべての入力ノードがレイヤー1に完全に接続されていることに注意してください。つまり、各入力ノードはレイヤー1の512ノードすべてに接続されています。

次に、レイヤー1の出力にアクティベーション関数を追加する必要があります。 ReLUをアクティベーションとして使用します。 アクティベーション機能は、次のプログラムステートメントを使用して追加されます-

model.add(Activation('relu'))

次に、以下のステートメントを使用して20%のドロップアウトを追加します。 ドロップアウトは、モデルが過剰適合しないようにするために使用される手法です。

model.add(Dropout(0.2))

この時点で、入力レイヤーは完全に定義されています。 次に、非表示のレイヤーを追加します。

非表示レイヤー

私たちの隠しレイヤーは512ノードで構成されます。 非表示レイヤーへの入力は、以前に定義した入力レイヤーからのものです。 以前の場合と同様に、すべてのノードが完全に接続されています。 非表示層の出力は、ネットワークの次の層に送られます。これは、最終的な出力層になります。 前のレイヤーと同じReLUアクティベーションと20%のドロップアウトを使用します。 この層を追加するためのコードはここにあります-

model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))

この段階でのネットワークは次のように視覚化できます-

入力レイヤー

次に、最後のレイヤーを出力レイヤーであるネットワークに追加します。 ここで使用したものと同様のコードを使用して、任意の数の非表示レイヤーを追加できることに注意してください。 さらに層を追加すると、ネットワークがトレーニングにとって複雑になります。ただし、すべてではありませんが、多くの場合、より良い結果の明確な利点を提供します。

出力層

与えられた画像を10の異なる数字に分類したいので、出力層はたった10のノードで構成されています。 次のステートメントを使用して、このレイヤーを追加します-

model.add(Dense(10))

出力を10の異なる単位に分類するため、softmaxアクティベーションを使用します。 ReLUの場合、出力はバイナリです。 次のステートメントを使用してアクティベーションを追加します-

model.add(Activation('softmax'))

この時点で、以下の図に示すように、ネットワークを視覚化できます-

出力レイヤー

この時点で、ネットワークモデルはソフトウェアで完全に定義されています。 コードセルを実行し、エラーがない場合は、次のスクリーンショットに示すように、画面に確認メッセージが表示されます-

ネットワークモデル

次に、モデルをコンパイルする必要があります。