簡體   English   中英

驗證准確度波動

[英]Validation Accuracy is fluctuating

數據由時間序列傳感器數據和不平衡數據集組成。 該數據集包含 12 類數據,需要預測人類的身體活動。

建築學:
注意:LSTM 輸出是直接饋送到輸出

 con_l1 = tf.keras.layers.Conv2D(64, (5, 1), activation="relu")(
            input_layer) 
 con_l2 = tf.keras.layers.Conv2D(64, (5, 1), activation="relu")(con_l1)
 con_l3 = tf.keras.layers.Conv2D(64, (5, 1), activation="relu")(con_l2)
 con_l4 = tf.keras.layers.Conv2D(64, (5, 1), activation="relu")(con_l3)
 rl = Reshape((int(con_l4.shape[1]), int(con_l4.shape[2]) * int(con_l4.shape[3])))(con_l4)
 lstm_l5 = tf.keras.layers.LSTM(128, activation='tanh',
                                recurrent_initializer=tf.keras.initializers.Orthogonal(seed=0), dropout=0.5,
                                       recurrent_dropout=0.25, return_sequences=True)(
     rl)  # required output of each cell to feed into second LSTM layer, so thats why return_sequences=True
       
 lstm_l6 = tf.keras.layers.LSTM(128, activation='tanh',
                                           recurrent_initializer=tf.keras.initializers.Orthogonal(seed=1), dropout=0.5,
                                           recurrent_dropout=0.25, return_sequences=True)(lstm_l5)

每 10 個時期后衰減為 0.9 的學習率 -

tf.keras.optimizers.Adam(learning_rate=0.001)

model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["acc"])
early_Stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss', mode = 'min', patience=10, restore_best_weights=True)

訓練准確率和損失分別單調增加和減少。 但是,我的驗證數據准確性開始劇烈波動。 驗證損失和准確性的波動可以在隨附的屏幕截圖中看到。

這是我訓練的屏幕截圖: 在此處輸入圖片說明

我已經設置了300 個epoch,但是訓練在像這里這樣的一些迭代之后只在21上停止了。 我已閱讀這篇文章為什么驗證准確度會波動? ,不知何故想到這是一個過度擬合的問題,可以通過使用 dropout 來克服。 所以,改變dropout的值(有點上下)但是,它並不能阻止波動。 誰能幫我弄清楚我哪里出錯了?

看起來也對我過度擬合

以下是可在此處找到的內容摘要: https : //www.tensorflow.org/tutorials/keras/overfit_and_underfit#strategies_to_prevent_overfit

縮小網絡規模

與復雜模型相比,簡單模型不太可能過度擬合。

這個非常簡單,較小的網絡沒有足夠的空間來進行導致記住訓練集的脆弱學習

權重正則化

減輕過度擬合的一種常見方法是通過強制其權重僅采用較小值來限制網絡的復雜性

L2 權重正則化更常見,也稱為權重衰減,您可以使用 kernel_regularizer 參數將其添加到您的層,例如:

tf.keras.layers.Conv2D(64, (5, 1), activation="relu", kernel_regularizer=regularizers.l2(0.001))

退出

dropout 的直觀解釋是因為網絡中的單個節點不能依賴其他節點的輸出,每個節點必須輸出對自己有用的特征

您已經在使用一些 dropout,但也嘗試在每個 conv2d 層之間放置一個 dropout 層,嘗試找出 0.2 和 0.5 之間的哪個值效果最好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM