在神經網路中有很多引數,有些引數,比如權重是可以通過訓練集學習更新的;
但是有些引數是在訓練開始之前人為設定的,比如學習率(或初始學習率),層的大小等這類引數,我們可以稱之為超引數。
這樣的引數一次訓練只能設定一次,很顯然為了找到乙個合適的數值,需要不斷調整其設定值,重複訓練模型,觀察其結果。
那為什麼不直接在訓練集上觀察其調整帶來的效果呢?因為如果只是在訓練集上觀察效果,那麼學習總是會往盡可能多的滿足訓練集上的情況靠近。但是換了個從未觀察過的樣本集合中,可能效果就不是那麼好。所以此時為了調超引數,引入乙個網路從未學習的樣本集合——驗證集,來**每一次調超引數後的結果。
測試集是不能以任何形式參與神經網路中的學習的過程中的。如果參與了,那麼就無法保證模型在未觀測的資料上的表現的可靠性。
似乎這樣說,和驗證集貌似效果一樣。但是驗證集的不斷參與調整超引數的過程,就已經不滿足測試集「不能以任何形式參與神經網路中的學習的過程中」這乙個原則。
驗證集的存在是為了調整超引數,而已經確定完最佳超引數的模型如何去檢視其的表現如何呢?那麼這就是測試集的存在的意義。
如果此時我對於驗證集的想法沒有錯誤的話,那麼如果你的模型不需要調整超引數,就可以在fit的過程中,直接拿測試集的資料作為validation_data(驗證資料)。而不需要為此設定乙個驗證集。
在訓練的過程中使用訓練集(訓練權重引數)以及驗證集(為了對比超引數調整前後的變化);訓練結束後,使用測試集測試效能。如果需要訓練超引數,訓練集和驗證集的都不應該出現在測試集中。
為何需要核函式
生存?還是毀滅?哈姆雷特 可分?還是不可分?支援向量機 之前一直在討論的線性分類器,器如其名 汗,這是什麼說法啊 只能對線性可分的樣本做處理。如果提供的樣本線性不可分,結果很簡單,線性分類器的求解程式會無限迴圈,永遠也解不出來。這必然使得它的適用範圍大大縮小,而它的很多優點我們實在不原意放棄,怎麼辦...
為何需要呼叫「super viewDidLoad」
super didreceivememorywarning void viewdidload 在上面的 中,什麼需要呼叫父類相應的方法呢?以viewdidload為例,父類 super 中的 viewdidload 會幫助你做一些初始化的工作,比如 a是父類,b繼承a,b 在viewdidload ...
為何需要閉包
假設有乙個需求,需要在頁面上顯示乙個瀏覽時間,從開啟頁面的瞬間開始計時,每過一秒加一。本質上說,這個業務就是乙個累加器,每過一秒自增一次。首先最簡單的 每隔一秒加一 我們立刻想到的是使用計時器,每隔一秒呼叫一起累加器函式 let second 0function counter setinterva...