2017-02-14 17 views
0

低下になり、私は私のトレーニングセットの精度(98%)で良い結果を持っていますが、設定の精度をテストすること(82%程度)低いまま。私は過大な問題に直面しています。 私はドロップアウト機能(ニューロンの50%を維持する)を実装して解決しようとしましたが、この解決策はトレーニングの精度を80%に低下させることが判明しました!私はCNNにもっと多くのニューロンを持たなければならないということですか? この問題を防ぐにはどうすればよいですか?私はここにTensorflowライブラリを使用していますトレーニング精度が画像分類のための畳み込みニューラルネットワークを実装

は、トレーニングループのコードの一部である:あなたの試験精度を型学習と同じマークの周りにもある場合

for epoch in range(22000): 
    permutation=np.random.permutation(19600) 
    permutation=permutation[0:200] 
    batch=[train_set[permutation],train_label[permutation]] 
    summary,model,cost=sess.run([merged,train_step,cross_entropy],feed_dict={X:batch[0],Yreal:batch[1],drop_value:0.5}) #training with 50% of the neurons 
    train_writer.add_summary(summary,epoch) 
    print(cost) 
    if epoch%500==0: 
     print(epoch) 
     summary=sess.run(merged,feed_dict={X:test_set[0:300],Yreal:test_label[0:300],drop_value:1}) #evaluating testing set accuracy using 100% of the neurons 
     test_writer.add_summary(summary,epoch) 
+0

あなたのトレーニングの精度が減少するために* *はずのドロップアウト種類ではないですか?結局のところ、ドロップアウトとは、小さくて強力でないネットワークを使ってトレーニングをしているということです。何が問題なのですか? –

+0

実際にあなたが正しいです、私はこのように考えていませんでした。しかし、テストの精度を上げたい場合は、トレーニングの精度を高く保つ必要があります。良いトレーニングの精度と素敵な一般化のバランスをとる方法はありますか?私の最初のアイデアは、強力なネットワークを鍛えることです。私はここで試してフィードバックします。 –

答えて

1

を(私はそれを正しく実装わかりません)ドロップアウトの場合の精度は、あなたはニューロンの数を増やすことができます。また、初期ドロップアウトとして0.50もかなり高いです。 (すなわち。ドロップアウト層に0.75の確率を維持する。)0.25から開始します。また、私は、データの性質に応じて、あまりにもいくつかの正則を使用してカラーチャンネルを交換し、明るさを歪め、回転などのいくつかのデータの増強を使用することをお勧めします。学習曲線をプロットし、トレーニングの正確さによってテスト精度がどのように変化するかを確認します。

+0

ありがとうございました。実際にドロップアウトを実装した後、トレーニングとテストは非常によく似た学習曲線を持っています。お勧めのとおり、私は他のドロップ値を試してみます。どの層にニューロンを追加することをお勧めしますか? –

+0

それは主観的ですが、低ドロップアウトがうまくいかない場合は、明らかに最終的なものを除いて、すべてのレイヤーで二重ニューロンが動作すると言います。 – rajat

関連する問題