目錄這其實是個玄學
train loss 不斷下降,test loss趨於不變,說明網路過擬合;也就是測試集沒有被訓練,也有可能是梯度消失問題
檢視神經網路的層
model1 = sequential()
model1.add(embedding(max_words, embedding_dim))
model1.add(lstm((lstm_units)))
model1.add(dense(3, activation='softmax'))
model1.summary()
這裡只有簡單的三層神經網路,lstm層之後直接到輸出層了,這個網路是非常簡單的,同時也存在乙個問題,就是容易導致梯度消失
測試集的精度在下降,因此沒有被訓練。接下來增加dense層,啟用函式為relu,在現有的研究成果中,relu啟用函式是已經被證明了可以有效的解決梯度消失問題
整流線性單元(relu)是最廣泛使用的啟用函式,因為它解決了梯度消失的問題。更早時候,sigmoid 和 tanh 函式都是最常用的啟用函式。但是它們都會遇到梯度消失的問題,即在反向傳播中,梯度在到達初始層的過程中,值在變小,趨向於 0。這不利於神經網路向具有更深層的結構擴充套件。relu 克服了這個問題,因此也就可以允許神經網路擴充套件到更深的層。refs因此增加乙個dense層,啟用函式是relu
從結果來看訓練集的誤差是不斷下降的,但是驗證集的誤差並沒有下降,因此這裡可是是資料預處理存在的問題,但是驗證集和訓練集資料預處理的是一致的,而且樣本也是隨機打亂的,因此排除資料集的問題。因此考慮樣本分佈是否在進入下一層的時候發生了改變
對於神經網路這種包含多個隱層的模型,在訓練過程中,各層引數不停變化,所以各個隱層都會面對」covariate shift「的問題,這個問題不僅僅會發生在輸入層,而是在神經網路內部都會發生,因此是」internal covariate shift「。因此增加bn和dropout檢視效果batch normalization的基本思想:深層神經網路在做非線性變換前的輸入值在訓練過程中,其分布逐漸發生偏移,之所以訓練收斂慢,一般是整體分布逐漸往非線性啟用函式的兩端靠近,這導致了反向傳播時淺層神經網路的梯度消失。而batch normalization就是通過一定的規範化手段,將每個隱層輸入的分布強行拉回到均值為0方差為1的標準正態分佈上去,這使得輸入值落回到非線性啟用函式」敏感「區域。這使得梯度變大,學習速度加快,大大提高收斂速度。cnblogs
比之前的效果要好一些,但是,驗證集的loss似乎還是沒什麼變化,需要再逛一下論壇~
究竟是發生了什麼可怕的情況???
梯度消失、大量神經元失活、梯度**和瀰散、學習率過大或過小等。。。
目前學長提到的解決方案是增加乙個dense層,把神經網路變更深,隨著深度的增加容易過擬合,因此加入bn和dropout降低過擬合
解決方案感覺其實是存在衝突的,但其實是我這邊**的bug,
early stoping和dropout,bn都增加了,但是效果不是很滿意,因此是感覺是資料的bug
還是需要進一步再產看
神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
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...