2017-06-23 9 views
1

私は、自動品質管理の目的で画像を分類するようにCNNを設計しました。入力イメージは320 x 320ピクセルです。私は5 convレイヤー、512出力のFCレイヤー、2つの出力のみを持つ最終レイヤーを持っています:「良い」か「悪い」。品質管理は1.0精度で行わなければならない。私はテンソルフローを使用しています。CNNに基づくバイナリクラシファイアの設計

私はCNN初心者で、私のモデルの評価に問題があります。トレーニングセットでは1.0の精度が得られますが、時にはバリデーションセットでも得られますが、コスト関数の値が心配です。私のモデルは非常に大きなロジットを出力し、これらのロジットをソフトマックスすると、常に「良い」または「悪い」という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

ありがとうございました。私は今ウェイトとドロップアウト層の正則化を使用していますが、これは問題を解決しませんでした。私はすべてのconvレイヤにReluのアクティベーションを追加しました。このオペレーションは、コストを数十万、数百万に増加させ、非常に高い精度(0.99以上)を維持しました。非常に小さなデータセット(500例)によって問題が発生する可能性はありますか? – Marcin

+0

500の例は小さなデータセットです。より多くのデータを収集することができれば、データセットが大きくなると間違いなく過不足が緩和されます。ドロップ率を上げようとしましたが、精度が低下するかどうかを確認しましたか? –

+0

はい私はドロップ率を上げようとしましたが、精度は少し落ちました。私のモデルの出力ロットはまだ非常に大きく、結果は1.0または0.0の分類になります。 – Marcin

関連する問題