簡體   English   中英

解釋訓練損失/准確性與驗證損失/准確性

[英]Interpreting training loss/accuracy vs validation loss/accuracy

關於使用 Lenet5 網絡在 MNIST 上解釋某些優化器的性能,以及驗證損失/准確度與訓練損失/准確度圖准確地告訴我們什么,我有幾個問題。 所以一切都是在 Keras 中使用標准 LeNet5 網絡完成的,它運行了 15 個 epoch,批量大小為 128。

有兩張圖,train acc vs val acc 和 train loss vs val loss。 我制作了 4 個圖表,因為我運行了兩次,一次使用 validation_split = 0.1一次使用 model.fit 參數中的 validation_data = (x_test, y_test) 具體差異如下所示:

train = model.fit(x_train, y_train, epochs=15, batch_size=128, validation_data=(x_test,y_test), verbose=1)
train = model.fit(x_train, y_train, epochs=15, batch_size=128, validation_split=0.1, verbose=1)

這些是我制作的圖表:

using validation_data=(x_test, y_test):

在此處輸入圖像描述

using validation_split=0.1:

在此處輸入圖像描述

所以我的兩個問題是:

1.) 如何解釋 train acc vs val acc 和 train loss vs val acc 圖? 就像它准確地告訴我什么以及為什么不同的優化器具有不同的性能(即圖表也不同)。

2.) 為什么當我使用 validation_split 時圖表會發生變化? 使用哪一個會是更好的選擇?

我將嘗試提供答案

  1. 您可以看到,接近尾聲的訓練准確度略高於驗證准確度,訓練損失略低於驗證損失。 這暗示了過度擬合,如果你訓練更多的時期,差距應該會擴大。

    即使您使用相同的 model 和相同的優化器,您也會注意到運行之間的細微差異,因為權重是隨機初始化的,並且與 GPU 實現相關聯的隨機性。 您可以在此處查看如何解決此問題。

    不同的優化器通常會產生不同的圖形,因為它們更新 model 參數的方式不同。 例如,普通 SGD 將以恆定速率更新所有參數和所有訓練步驟。 但是,如果您添加動量,則速率將取決於先前的更新,並且通常會導致更快的收斂。 這意味着您可以在較少的迭代次數中達到與普通 SGD 相同的精度。

  2. 圖表會發生變化,因為如果隨機拆分,訓練數據會發生變化。 但是對於 MNIST,您應該使用數據集提供的標准測試拆分。

暫無
暫無

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

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