2016-12-27 5 views
2

短いテキスト分類のためのCNNを使用しています(プロダクションタイトルを分類してください)。 enter image description here短いテキスト分類のCNNは、妥当性検査セットで悪い結果を示します。

損失が異なる: コードはhttp://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/

からtrainningセット、テストセットの精度であり、validatinoセットが打撃です。妥当性検査の喪失は、訓練セットとテストセットの損失より2倍です(私は2枚以上の写真をアップロードできません)。

訓練セットとテストセットはクローラーによってウェブから入手され、 7:3.そして、実際のアプリのメッセージから検証し、手動マーキングでタグ付けします。

私はほとんどすべてのハイパーパラメータを試しました。

アップサンプリング、ダウンサンプリング、ノーサンプリングを試しました。

30、50、75

しかし、これらの作業のいずれも0.3、0.5、0.7

embedding_size 1024、2048、5096

ドロップアウトの

バッチサイズ!

は、今は以下PARAM使用:

バッチサイズである2048

embedding_sizeはsentence_length 15

filter_sizeは3,4,5

で30

でありますdropout_probは0.5

l2_lambdaは0です。 .005

最初はオーバーフィットだと思います。しかし、モデルはテストセットでうまく動き、セットを練習します。私は混乱しました!

テストセットとトレーニングセットの間のディストリビューションは大きく異なりますか?

検証セットのパフォーマンスを向上させるにはどうすればよいですか?

+0

プロット内にトレースが正しく表示されていますか?あなたのテスト精度が最高だということは奇妙に思えます。ほぼ間違いなく正しい? –

+0

@chris_anderson Thx!私はそのプロットのトレースが正しく表示されていると確信しています。理由はわかりません。検証精度が低すぎます –

+0

元のチュートリアルの精度を再現できますか?このモデルの検証精度はどのくらいですか? –

答えて

0

私は損失のこの差は、検証データセットは、トレーニング/テスト・セットとは異なるドメインから収集されたという事実から来ていると思う:

トレーニングセットとテストセットは、クローラによってウェブからあり、その後、それは当然で良い結果を提供するために失敗したので、

モデルがトレーニング中に任意の実際のアプリのメッセージデータを見ていないマーキング> 3.And検証が本当のアプリのメッセージからのものであり、手動でタグ付け:7で彼らに を分割検証セット。伝統的に、3つのセットはすべて、同じデータ・プールから生成されます(たとえば、7-1-2分割)。検証セットは、ハイパーパラメータチューニング(batch_size、embedding_lengthなど)に使用され、テストセットは、モデルパフォーマンスの客観的指標に対して保持されます。

最終的にアプリケーションデータのパフォーマンスに関する懸念がある場合は、そのデータセットを7-1-2(train-validation-test)に分割し、Webクローラーデータを使用してトレーニングデータを補強します。

0

検証データは、ノイズを含む可能性のあるWebクロールから取得したトレーニングデータよりも現実的かもしれない実際のアプリケーションメッセージデータから来るので、検証セットの損失は高いと思います。あなたの学習率は非常に高く、バッチサイズはかなり推奨されているものよりも大きい場合。あなたは[0.1,0.01、0.001、0.0001]、[32、64]のバッチサイズで学習率を試すことができますが、他のハイパーパラメータ値は大丈夫です。

私はトレーニング、検証、テストセットについてコメントしたいと思います。トレーニングデータはトレーニングのためのトレーニングセットと検証セットに分割され、テストセットは私たちが触れないデータであり、最後にモデルをテストするためにのみ使用します。私はあなたの検証セットが 'テストセット'であり、あなたのテストセットが '検証セット'だと思います。それは私がそれらを参照する方法です。