1

バッチ正規化を使用した DNN のモデル、特に keras を使用したモデルを理解するのに苦労しています。私が構築したこのモデルの各層の構造と内容を誰か説明してもらえますか?

modelbatch = Sequential()
modelbatch.add(Dense(512, input_dim=1120))
modelbatch.add(BatchNormalization())
modelbatch.add(Activation('relu'))
modelbatch.add(Dropout(0.5))

modelbatch.add(Dense(256))
modelbatch.add(BatchNormalization())
modelbatch.add(Activation('relu'))
modelbatch.add(Dropout(0.5))

modelbatch.add(Dense(num_classes))
modelbatch.add(BatchNormalization())
modelbatch.add(Activation('softmax'))
# Compile model
modelbatch.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Train the model
start = time.time()
model_info = modelbatch.fit(X_2, y_2, batch_size=500, \
                         epochs=20, verbose=2, validation_data=(X_test, y_test))
end = time.time()

これは、私のモデルのすべてのレイヤーだと思います。

print(modelbatch.layers[0].get_weights()[0].shape)
(1120, 512)
print(modelbatch.layers[0].get_weights()[1].shape)
(512,)
print(modelbatch.layers[1].get_weights()[0].shape)
(512,)
print(modelbatch.layers[1].get_weights()[1].shape)
(512,)
print(modelbatch.layers[1].get_weights()[2].shape)
(512,)
print(modelbatch.layers[1].get_weights()[3].shape)
(512,)
print(modelbatch.layers[4].get_weights()[0].shape)
(512, 256)
print(modelbatch.layers[4].get_weights()[1].shape)
(256,)
print(modelbatch.layers[5].get_weights()[0].shape)
(256,)
print(modelbatch.layers[5].get_weights()[1].shape)
(256,)
print(modelbatch.layers[5].get_weights()[2].shape)
(256,)
print(modelbatch.layers[5].get_weights()[3].shape)
(256,)
print(modelbatch.layers[8].get_weights()[0].shape)
(256, 38)
print(modelbatch.layers[8].get_weights()[1].shape)
(38,)
print(modelbatch.layers[9].get_weights()[0].shape)
(38,)
print(modelbatch.layers[9].get_weights()[1].shape)
(38,)
print(modelbatch.layers[9].get_weights()[2].shape)
(38,)
print(modelbatch.layers[9].get_weights()[3].shape)
(38,)

よろしくお願いします。

4

1 に答える 1

1

あなたのモデルを見てみましょう:

次元 1120 の入力層があり、それに接続されています。バッチ正規化層の後に、512 個のニューロンを持つ最初の非表示層があります。その後、アクティベーション関数、その後ドロップアウトレイヤー。model.summary()コマンドを使用してモデルを視覚化できることに注意してください

理論的には、これらのレイヤーを、次の変換を適用する 1 つのレイヤーと見なすことができます (そしてそうすべきです): バッチ正規化、アクティブ化、およびドロップアウト。実際には、実装のモジュール性が得られるため、各レイヤーは Keras で個別に実装されます。レイヤーを設計できるすべての方法をコーディングする代わりに、ユーザーはレイヤーのバッチ ノルムまたはドロップアウトに追加することを選択できます。モジュールの実装を確認するには、http ://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture4.pdfを参照することをお勧めします。より深い知識を得たい。

バッチ正規化レイヤーには、ご覧のように 4 つのパラメーターがあります。2 つの調整可能なパラメーター: ガンマとベータ、およびデータによって設定される 2 つのパラメーター (平均と標準偏差)。それが何であるかを知るには、スタンフォード クラスを見てください。バッチ正規化に関する元の論文https://arxiv.org/abs/1502.03167にも記載されています。入力データの前処理ステップで行うように、各レイヤーでデータを正規化することにより、学習速度を向上させ、精度を向上させるのは単なるトリックです。

私が言ったことから、モデルの残りの部分を推測できます。

注意: ソフトマックスの前の最後のステップでは、バッチ正規化レイヤーを使用しません。

より明確ですか?

于 2017-08-17T09:40:11.680 に答える