訓練集準確率最後接近100%,測試集準確率在60%,隨著訓練step的增加不再增長。過擬合了,怎麼辦?

情況如上圖所示,第一張圖為準確率變化函數,第二章為loss函數變化曲線。橙色線是訓練集,藍色線是測試集。改如何調參呢???應該是過擬合了,使用了數據增強,dropout,L2, batch norm,可是還沒有用,怎麼辦?數據集為6萬多的圖片,用的VGG-16。


都在使勁懟模型, 加正則是怎麼回事? 恕我直言, 測試集準確率穩定在50%是什麼意思? 代表訓練集對測試集幾乎沒有幫助。

如果題主的模型沒搭錯, 那麼大概率就是數據雜訊太高,幾乎沒有訓練價值

題主可以用一個足夠簡單並且熟悉的模型, 把訓練集shuffle一下然後做個3折的CV, 如果能至少有平均高於70%的準確率, 那大概是測試集和訓練集不相關; 如果還是50%左右, 那隻能說題主使用的數據沒有較明顯的規律性. 如果是僅僅是學習使用, 建議更換其他使用較多, 定義良好的數據集.

另外下次提問的時候請至少把模型, 損失函數的類型, 數據量給出來.

戾氣有點重,懶得改了,不好意思.


訓練集下不來,還是正則加的不夠,比如,L2係數往死里放大,不應該不好使。

學習率往死里調大,訓練集上都好不了

另外主要看你是啥模型啥數據,全連接結構而且數據量不大,可不就這樣,拿點訓練數據全死記硬背記下來了,可不100%準確。改成稀疏結構試試,deep崛起的奧義就是稀疏結構啊。


小明考試前複習了一晚的英語,第二天考試還是不及格,為什麼呢?——因為考的不是英語


問題描述還不夠清晰,這是匿名問題嗎?怎麼@樓主?

  1. 多分類還是二分類?
  2. 數據均衡嗎?
  3. VGG16 是參數是 Pre-Trained 的嗎?

先好好檢查數據有沒有問題,先好好檢查數據有沒有問題,先好好檢查數據有沒有問題!

你沒有提具體是多分類還是二分類,如果是二分類問題,測試集正確率和隨機猜測一樣,可能是樣本不均衡導致的....


樓主描述了更多的信息,可以更新下答案了。

首先說說數據不均衡的問題吧,數據不均衡非常影響神經網路的任務,因為神經網路是很容易學習到一些規則。做個比方就是如果是二分類問題,A類樣本佔有90%,B類樣本佔有10%,這時候模型將所有樣本的 Label 預測成A類, Accuracy 也有了 90%。這裡建議你不要光看 Accuracy

我們都知道,神經網路要關注兩件重要的事情

  1. Representation
  2. Output

CNN 的話更容易說明上面的兩點,前部分做特徵提取,後部分使用全連接網路做分類。看樓主說的,你用的應該是 Pre-Trained 好了的 Model。是自己 Pre-Trained 的嗎?如果不是,就不能隨隨便便在 Pre-Trained 的網路加層,為什麼?因為如果事先 Pre-Trained 的時候沒有加 Batch Normalization ,等到你去用的時候加 Batch Normalization,這個 Pre-Trained 就差不多跟沒訓練一樣, 因為 Batch Normalization 會改變每層的輸入(細節可以不必追究,知道就行)。

數據集本身的雜訊確實比較大,比如在在地球上對著遙遠的宇宙拍,照相機本身的解析度加上大氣的畸變,使得拍到的照片不像小貓小狗那麼好辨別

感覺這樣來的話訓練出來的模型誤差來源方差的會比較大,一般來說要好好 Trade-Off 問題複雜度,模型複雜度和數據規模這三者之間的關係,好好認識一下哪方面才是你現在的最大的難題。

給出一些中肯的建議,可以從下面幾點入手:

  1. 好好看看你現在模型的預測結果概率輸出,尤其是測試集上面的,看能不能找到出錯的關鍵。
  2. 先將那些正則化去掉,如果你像我上面說的那樣是 Pre-Trained 沒用 Batch Normalization,那最好還是先不要用 Batch Normalization。正則化可是大殺器,看著點用....
  3. 簡化模型,不要用 VGG-16, 嘗試用一些層數比較少的模型試試。
  4. 改改你的評估方式吧,Precision 和 Recall 都可以看看。
  5. 能增加數據就增加吧(和沒說一樣....)

(盡量都用簡明的話語說明白,祝你順利)


你這是機器學習的基本問題――數據不匹配問題。用了這麼多模型,基本統計學知識也要補上啊。簡單來說,你這個偏差很大,原因有:

1 訓練集和測試集的數據不同,比如,訓練用高清,測試用手機拍照;訓練晴天的照片,測試雨天的照片…………改,改到,從測試集和訓練集各拿出一張照片,你都分不清哪張來自測試集的。

2 訓練集和測試集的數據分布不同:訓練集有太少正樣本,測試集有太多正樣本。比如說,訓練了半天看狗,實際你只給它看了一眼狗,其他都是「沒有狗」的照片,然後你讓它去街上找狗。……改,重做集合,拿到所有數據,亂排序一下,再分測試訓練集,這樣有狗圖片的比例在測試集和訓練集是一樣的。(注,這方式有點問題,比例並非需要一致,實驗室和現實世界數據比例也不可能一致,只要你數據夠多就能學到真知識,這個方法只是讓你評估模型,也可參考3)

3 簡單點,從現有的訓練集A,先做混亂,再拿出部分數據來,當成開發測試集B,重新訓練使用剩餘數據集合A-B(集合的減法),訓練好之後,再用模型來測B,(你的現有測試集C沒動過)看看偏差如何。

如果偏差大,說明模型不夠驚喜,無法泛化,需要各種「特徵工程」(見4),對神經網路結構做各種「姿勢解鎖」(貌似你已經知道足夠多了),直接說,用的模型是白痴,需要重做。嗯,偏差太大了,都不好意思去看人方差的大小。一直循環,直到你得到滿意的偏差大小。

如果訓練偏差小的夠滿意了,再看在B上的方差,如果方差大,那肯定就是你做亂排序的時候偷懶了,我是沒辦法了,你再做一遍吧。

4 對於偏差出錯的,一定要識別為什麼出錯,一般都是人工來識別,這叫誤差分析。誤差分析用來幫你修正特徵選擇,更深入的分析出錯原因,可能會因此添加新特徵。

5 直接來說,深度學習面對的都是百萬,千萬的數據,你的數據不夠多,可以考慮添加「合成數據」。例子:比如圖片偏一點,左右轉一下,等等,各種玩法祝開心。

手機打字真累


單從描述上看不是很清楚你的情況,不過可以看看以下方法是否有效:

1、神經網路是CNN嗎?深度是多少層呢?如果層數太深可以適當減少,學習速率可以先調大一點看是不是落在局部最優解了,另外可以試著換一下優化函數;

2、數據增強後泛化能力還是很差,那有一種可能是訓練集和測試集完全不相關,可以適當對調一下訓練集和測試集的數據,使得網路可以記住一些測試集的特徵。


結合這段時間自己遇到的問題大概說下自己怎麼做的 .

1.首先是模型方面,l1, l2, bn, dropout, 層數,神經單元個數都調整下試試,但是感覺很大可能不是這部分的問題,可實驗也需要做充分了才能去驗證是不是數據的問題。

2.訓練數據隨機劃分,好比分為5份,拿四份訓練另外一份,對比模型輸出標籤和真實標註標籤的差異,驗證是不是訓練數據問題。

3.拿測試數據作為訓練數據,訓練數據作為測試集,看看準確率。

4.看看learning curve 看看訓練數據量和模型準確率的關係。

其實這種情況大多是數據的問題 。


看起來好像是學習率有點大了。如果數據沒問題的話。


(1) 查看是否Normalization做的有問題

(2) 查看是否有Noise存在

(3) 在Training error 沒到100%,比如90%的時候停掉,看Test Error 走向如何

(4) 如果(3)有收穫,則加入Validation。


1,人工標註有問題;2,數據量不夠;3,各種防止過擬合的方法沒用好。關於第二點,除了人工合成數據外,聽說遷移學習有用,不過我也沒用過。


沒有百試不爽的方法避免過擬合,建議減少特徵變數的數量,多訓練幾個模型,每個模型包含不同的特徵變數的組合,也許會發現導致訓練集準確率過高的原因。訓練集準確率100%貌似是有點問題的。


我也遇到過,訓練imagenet的時候我當時的做法是加batchnorm層,當時消除了過擬合但準確率上不去。建議你先仔細判斷是否數據集label有打錯,再去在模型上做改動,如果沒問題就最好先拿預訓練的模型finetuning一下看看。


測試集和訓練集的分布一致么?比如正樣本率?


初學者答一波...

一個option是,增加訓練的數據量


把`batch的準確率`和`訓練集的平均準確率`的計算方式貼出來吧, 不然不好分析.


推薦閱讀:

人工智慧領域有哪些重要的學術會議和頂級實驗室?
如何評價Alpha Go Zero以及它對AI和人類的影響?
想寫一個機器學習類的五子棋,可能么?可能的話需要看什麼書,參考什麼,求指點
POI(Person of Interest)中的人工智慧The Machine和撒瑪利亞人在現實中有實現的可能嗎?
如何評價第10期UEC杯世界電腦圍棋賽絕藝奪冠?

TAG:人工智慧 | 深度學習DeepLearning | TensorFlow | 卷積神經網路CNN |