不論神經網路被傳的多麼神乎其神,其主要作用還是通過資料訓練出乙個擬合函式。那麼首先需要注意的,是神經網路本身是否適合處理當前的資料。比如,卷積神經網路非常適合處理二維影象資料,而rnn/lstm則非常適合處理流資料。所以第一點,是根據資料設計合適的神經網路結構。
第二,資料集的構造也很重要。神經網路學習到的是訓練資料的分布,如果訓練資料和測試資料的分布不同,那麼就很難在測試資料上得到很好的效果。所以構造乙個分布夠廣,廣到能夠包括測試資料分布的訓練集也是很重要的。
其他的,假設已設計好了最優的結構,也有良好的資料集,但效能仍然不夠,可嘗試試驗的方案如下——
合適的學習率,大的學習率可能會導致神經網路在最優點附近隨機跳躍,無法收斂;小學習率可能會導致收斂速度過慢或收斂到區域性最優解。故可以嘗試調整學習率。也可以使用如下方案——在訓練過程中,一開始用大學習率,然後慢慢在迭代中降低學習率。
batch size, 大的batch size一般會使一次訓練得到的更新梯度更加可信,但同時會導致記憶體**(畢竟過多的資料被一次性載入到記憶體中了),所以調整batch size也需要多次嘗試。
當batch size較大時,一般可以用較大的學習率,因為此時的梯度是可信的,學習率大會加快收斂速度。一般從128左右開始調整。batch size合適最重要,並不是越大越好。
權重初始化,一般神經網路的初始權重是被隨機分配或通過某個預訓練模型分配的,但如果效果不好,也可以嘗試修改初始化的方案。
dropout模組可以使訓練出的神經網路泛化性更強,但也不一定,需要嘗試,一般加在全連線層,值一般設定為0.5。
把神經網路難以**的資料找出來,根據這些資料設計新的解決方案(修改神經網路結構等)。
融合多種神經網路模型,比如某個應用需要處理二維影象資料,然後中間結果是流資料,那麼就可以把卷積神經網路和lstm結合起來,或許會得到更好的結果。
用神經網路擬合乙個很小的資料集,如果損失不能降為0,則說明神經網路本身存在問題,這通常是乙個檢驗**是否寫錯的方法。
在影象的處理中,可以把影象分成多個尺寸的,用小尺寸訓練一下,再用大尺寸訓練一下。
10、做資料增強後再訓練。
11、調整優化演算法,sgd、adam等都可以試試。
12、調整loss function,一般來說越靠後發表的loss function能力越強,優化演算法也一樣。
13、資料進入訓練前先預處理,一般使用zero-center方法。
14、梯度歸一化。
15、盡量不用sigmoid函式,用tanh或relu啟用函式。
16、rnn的dim和embdding size,一般從128上下開始調整。
17、盡量把訓練資料打亂(shuffle)。
18、如果訓練報錯,cpu上執行的報錯會比gpu上的報錯更容易看懂。
19、嘗試使用正則化。
神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...
神經網路簡介 多層神經網路
如上圖所示,該神經網路有三層。我們標記第一層 也就是輸入層 為a 1 第一層與第二層連線權重為w 1 然後第一層輸入與第一層權重的線性和為z 1 第一層神經元個數為n 1 並依次標記剩餘網路層。可以看出,存在 z l j i 1 n l a l i w l i,j a l w l j a l 1 f...