訓練集明明很高,驗證集,測試集精度卻很低

2021-10-05 15:56:38 字數 1034 閱讀 5657

過擬合值得單獨開個章節。主要包括

1.資料量小,網路複雜

2.learning rate 比較高,又沒有設定任何防止過擬合的機制

1.簡化模型,利用現有深度學習手段增加資料(翻轉,平移,隨機裁剪,imgaug)

2.利用 dropout層

3.利用正則化

的話,img/255是肯定的

因為validation_split操作不會為你shuffle資料,所以如果你的資料前一半標籤全是1 ,後一半全是0,validation=0.5。恭喜你,你壓根也分不對,你的validation準確率會一直為0.因為你拿所有的正樣本訓練,卻想判斷負樣本。

有可能再讀取自定義的資料庫的時候出現問題,導致資料與標註不對應。比如第一張用第十張的標註

比如4000張訓練,1000張validation,300類,這顯然就是不合理的

大多數流行的backone比如resnet都有再imagenet資料集上與訓練過,那麼使用這種權重,比起隨即重新訓練,顯然要可靠不少,注意調整學習率。

可以通過使用現在流行的網路(resnet,unet等)替入你的**,如果結果沒有問題,你的結果有問題那麼肯定就是你網路結構出問題了。那麼可以通過逐層注釋掉排查究竟**出了問題

7.1 網路最後一層沒有使用正確的啟用函式

比如多類的應該使用softmax

有一些說法是relu由於對於很大的數值直接複製,所以會對softmax產生不好的影響,從而輸出不好的結果。所以可以使用tanh代替relu。

由於做dense prediction通常比較大。所以乙個batch一般都只有1-2張,不建議使用 bn。

另外keras tf1.x可能會出問題,

在訓練語句之前,檢查以下你的trainable引數,是否設定了一些引數是不可訓練的。這還可能導致你的輸出只能是乙個值,比如永遠**為標註0,因為你只有一點點的引數,而這並不是乙個模型(比如只有100個引數是可以訓練的,太簡單了,無法模擬)。

bag of tricks for image classification with convolutional neural networks

訓練集 驗證集 測試集

訓練集loss 驗證集loss 測試集loss 乙個好的網路,二者的差距應該是很低的。但一般情況下因為網路不可避免地存在一定程度上的過擬合,所以肯定是train loss低於test lost,但如果低太多,就得考慮是過擬合的問題還是因為樣本的特徵空間不統一的問題。驗證集基本是在每個epoch完成後...

訓練集,驗證集,測試集

普通引數就是可以被梯度下降所更新的,也就是訓練集所更新的引數。超引數是指訓練開始之前設定的引數,不在梯度下降的更新範圍內,比如網路層數 網路節點數 迭代次數 學習率等等 1.訓練集 確定模型後,用於訓練普通引數 2.驗證集 交叉驗證集cv 驗證集在每個epoch訓練完成後,用來測試一下當前模型的準確...

訓練集 測試集 驗證集

訓練集 用來訓練和擬合模型。驗證集 當通過訓練集訓練出多個模型後,使用驗證集資料糾偏或比較 測試集 模型泛化能力的考量。泛化 對未知資料的 能力 from sklearn.model selection import train test split import numpy as np from ...