[英]My LSTM model overfits over validation data
這是我的 LSTM 模型來對手勢進行分類。 最初,我有 1960 個形狀 (num_sequences, num_joints, 3) 的訓練數據,我將其重塑為形狀 (num_sequences, num_joints*3)。
這是我的模型:
input_shape = (trainx.shape[1], trainx.shape[2])
print("Build LSTM RNN model ...")
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(171, 66)))
model.add(Bidirectional(LSTM(units=256, activation='tanh', return_sequences=True, input_shape=input_shape)))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Bidirectional(LSTM(units=128, activation='tanh', return_sequences=True)))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Bidirectional(LSTM(units=128, activation='tanh', return_sequences=False)))
model.add(Dropout(0.5))
model.add(BatchNormalization())
model.add(Dense(units=trainy.shape[1], activation="softmax"))
print("Compiling ...")
# Keras optimizer defaults:
# Adam : lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8, decay=0.
# RMSprop: lr=0.001, rho=0.9, epsilon=1e-8, decay=0.
# SGD : lr=0.01, momentum=0., decay=0.
opt = Adam()
model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"])
我在火車上獲得了 90% 的准確率,在測試中獲得了 50% 的准確率
過擬合在深度學習中很常見。 為了避免過度擬合你的 LSTM 架構,請按以下順序嘗試以下操作:
希望這可以幫助!
您如何知道網絡過度擬合與數據集中的某種錯誤。 驗證損失最初會改善到某個時期,然后達到平穩狀態還是開始增加? 然后就過擬合了。 如果它從 50% 開始並保持在那里,則不是過度擬合問題。 隨着輟學的數量,你看起來不太可能過度擬合。 你是如何選擇驗證集的? 它是從整個數據集中隨機選擇的還是您進行了選擇? 隨機選擇數據總是更好,以便其概率分布反映訓練數據的概率分布。 正如評論中所說,請顯示您的 model.fit 代碼,那里可能有問題。 你如何輸入數據? 你用過發電機嗎? 50% 的驗證准確率讓我懷疑您的驗證數據是如何提供給網絡的,或者驗證數據的標簽存在一些錯誤。 我還建議您考慮根據驗證損失的監控動態調整學習率。 Keras 有一個回調函數,稱為 ReduceLROnPlateau。 文檔在這里。 設置它以監控驗證丟失。 我設置了參數 Patient=3 和 factor=.5 這似乎工作得很好。 你可以把訓練想象成下降到一個山谷。 當你下降時,山谷變得更窄。 如果學習率太大並且保持固定,您將無法進一步接近最小值。 這應該會提高您的訓練准確性,從而提高驗證准確性。 正如我所說的輟學水平,我不認為它過度擬合,但如果是,您也可以使用 Keras 正則化來幫助避免過度訓練。 文檔在這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.