『壹』 如何訓練神經網路
1、先別著急寫代碼
訓練神經網路前,別管代碼,先從預處理數據集開始。我們先花幾個小時的時間,了解數據的分布並找出其中的規律。
Andrej有一次在整理數據時發現了重復的樣本,還有一次發現了圖像和標簽中的錯誤。所以先看一眼數據能避免我們走很多彎路。
由於神經網路實際上是數據集的壓縮版本,因此您將能夠查看網路(錯誤)預測並了解它們的來源。如果你的網路給你的預測看起來與你在數據中看到的內容不一致,那麼就會有所收獲。
一旦從數據中發現規律,可以編寫一些代碼對他們進行搜索、過濾、排序。把數據可視化能幫助我們發現異常值,而異常值總能揭示數據的質量或預處理中的一些錯誤。
2、設置端到端的訓練評估框架
處理完數據集,接下來就能開始訓練模型了嗎?並不能!下一步是建立一個完整的訓練+評估框架。
在這個階段,我們選擇一個簡單又不至於搞砸的模型,比如線性分類器、CNN,可視化損失。獲得准確度等衡量模型的標准,用模型進行預測。
這個階段的技巧有:
· 固定隨機種子
使用固定的隨機種子,來保證運行代碼兩次都獲得相同的結果,消除差異因素。
· 簡單化
在此階段不要有任何幻想,不要擴增數據。擴增數據後面會用到,但是在這里不要使用,現在引入只會導致錯誤。
· 在評估中添加有效數字
在繪制測試集損失時,對整個測試集進行評估,不要只繪制批次測試損失圖像,然後用Tensorboard對它們進行平滑處理。
· 在初始階段驗證損失函數
驗證函數是否從正確的損失值開始。例如,如果正確初始化最後一層,則應在softmax初始化時測量-log(1/n_classes)。
· 初始化
正確初始化最後一層的權重。如果回歸一些平均值為50的值,則將最終偏差初始化為50。如果有一個比例為1:10的不平衡數據集,請設置對數的偏差,使網路預測概率在初始化時為0.1。正確設置這些可以加速模型的收斂。
· 人類基線
監控除人為可解釋和可檢查的損失之外的指標。盡可能評估人的准確性並與之進行比較。或者對測試數據進行兩次注釋,並且對於每個示例,將一個注釋視為預測,將第二個注釋視為事實。
· 設置一個獨立於輸入的基線
最簡單的方法是將所有輸入設置為零,看看模型是否學會從輸入中提取任何信息。
· 過擬合一個batch
增加了模型的容量並驗證我們可以達到的最低損失。
· 驗證減少訓練損失
嘗試稍微增加數據容量。
『貳』 如何讓利用神經網路進行預測,怎麼在進行訓練之後,怎麼看出訓練模型的好壞如何進行評判
可以用MATLAB神經網路工具箱,先提取樣本,用mapminmax函數歸一化,再newff函數建立網路,設置好訓練參數後,使用train函數訓練,最後用sim函數看預測結果。
在訓練過程中,有一個performance可以觀察,它的訓練目標就是你設置的goal。在訓練過程中,它會自動分出一部分樣本作為validation驗證,可以保證不過擬合。具體要評價效果還是應該看最後預測的精度。
附件是一個BP預測的實例。