我有兩個 keras 模型。我將輸出層連接成單個輸出。然后我在第二個模型中使用這個輸出。但是,我不清楚如何規范化我的資料。
規范化應該在什么時候發生?我在第一個模型之前標準化。我還嘗試通過tf.keras.layers.LayerNormalization(axis=0)and進行標準化tf.keras.layers.BatchNormalization(axis=0)。但是什么時候應該添加這些?
非常感謝任何指導或資源。
def phi(lat_dim, feature_normaliser, activation):
model1 = keras.Sequential()
model1.add(feature_normaliser)
model1.add(layers.Dense(100,activation= activation))
model1.add(layers.Dense(lat_dim))
return model1
def rho(model1, learning_rate, activation):
model2 = keras.Sequential()
model2.add(model1)
model2.add(Lambda(lambda x: K.sum(x, axis=0,keepdims=True)))
#tf.keras.layers.BatchNormalization(axis=0)
model2.add(layers.Dense(100,activation= activation))
model2.add(layers.Dense(1))
model2.add(BatchNormalization())
model2.compile(
optimizer=tf.optimizers.SGD(learning_rate=learning_rate),
loss='mean_squared_error')
return model2
呼叫模型,結果nan:
feature_normaliser = layers.Normalization(input_shape=[10], axis=1,name='normaliser')
feature_normaliser.adapt(X_train)
phi_output = phi(5, feature_normaliser, 'relu')
rho_output = rho(phi_output, 0.0001, 'relu')
history_rho, rho_trained = Model_fit(rho_output,X_train,Y_train,X_val,Y_val, 128, 10)
print(history_rho.history['loss'][-1])
uj5u.com熱心網友回復:
您可以在任何地方進行標準化。
但是有兩個重要的規范化:
- 輸入的“資料”應該被規范化(通常在模型之外)
- 輸出“資料”應該被規范化(通常在模型之外)并且你的最終激活必須與這個規范化兼容
BatchNormalization幾乎可以在任何地方使用,沒有正確答案。就像構建任何模型一樣,使用BatchNormalization是一種藝術。你測驗,看看結果好不好,換個地方等等。
例如,您可以不規范化輸入資料并BatchNormalization在輸入層之后放置一個。這是一種可能。您可以使用BatchNormalizationbefore 一些激活來避免梯度消失和 relu 鎖定。
模型中的BatchNormalziation幾層可以使訓練更快,但這不是“必要的”。
警告:如果您使用Dropout,請不要立即使用BatchNormalization。它們不兼容,因為 dropout 會改變資料分布(保持均值,但會改變偏差),并且這種變化會在訓練和驗證之間產生差異,從而使規范化的作業方式有所不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432300.html
下一篇:獲取`ValueError:`logits`和`labels`必須具有相同的形狀,收到((None,1)vs())`錯誤
