2017-06-23 161 views
1

爲了自動質量控制的目的,我設計了CNN來分類圖像。輸入圖像爲320 x 320像素。我有5個conv層,FC層有512個輸出,最後一層只有兩個輸出:'好'或'壞'。質量控制必須以1.0的精度完成。我正在使用tensorflow。基於CNN的二元分類器的設計

我是CNN的初學者,在評估模型時遇到問題。雖然我確實在訓練集上有1.0的準確性,有時也在驗證集上,但我擔心成本函數的價值。我的模型輸出非常大的logits,如果我softmax這些logits,我總是得到100%的「好」或「壞」概率。因此,如果我的模型正確地預測了示例,則成本(以cross_entropy_with_logits計算)爲0.如果所有訓練示例都被正確預測,那麼權重不會再發生變化,並且我的模型不會改進驗證集的性能。

這裏是我的模型(含批10例)的輸出示例:

Logits 
    [[ 2169.41455078 2981.38574219] 
[ 2193.54492188 3068.97509766] 
[ 2185.86743164 3060.24047852] 
[ 2305.94604492 3198.36083984] 
[ 2202.66503906 3136.44726562] 
[ 2305.78076172 2976.58081055] 
[ 2248.13232422 3130.26123047] 
[ 2259.94726562 3132.30200195] 
[ 2290.61303711 3098.0871582 ] 
[ 2500.9609375 3188.67456055]] 

    Softmax: 
    [[ 0. 1.] 
[ 0. 1.] 
[ 0. 1.] 
[ 0. 1.] 
[ 0. 1.] 
[ 0. 1.] 
[ 0. 1.] 
[ 0. 1.] 
[ 0. 1.] 
[ 0. 1.]] 

    cost calculated with tf.nn.softmax_cross_entropy_with_logits 
    [ 811.97119141 0.   874.37304688 0.   933.78222656 
    670.80004883 0.   0.   807.47412109 0.  ] 

你認爲什麼是這裏的問題?我的CNN對於應用來說太複雜了,並且輸出100%的概率?我的CNN只是過度配合?你輟學會有幫助嗎?

回答

1

問題是過度擬合。爲了解決這個問題,有一些想法:

  1. 增加訓練數據集,收集更多的數據或基於現有的數據集生成轉換後的圖像。
  2. 涉及正規化,L1/L2正則化,批量規範,輟學將有所幫助。
  3. 考慮使用預先訓練的模型,即所謂的Transfer Learning,請參閱this tutorial
+0

謝謝你的回答。我現在正在使用權重和丟失圖層的正則化,但這並沒有解決問題。我還將Relu激活添加到所有的conv層。這種操作將成本提高到數十萬和數百萬,並保持非常高的精度(超過0.99)。這個問題是否可能由非常小的數據集(500個示例)引起? – Marcin

+0

500個示例是小數據集。如果你可以收集更多的數據,更大的數據集肯定會緩解過度擬合。你有沒有試圖增加掉率以查看準確性是否下降? –

+0

是的,我試圖提高下降率和準確性略有下降。我的模型的輸出logits仍然很大,結果在1.0或0.0分類。 – Marcin