4

Kerasでimdbデータセットを使用するLSTMネットワークのサンプルコードを実行します。次のリンクでコードを見つけることができます。 imdb_lstm.pyKerasを使用したLSTMネットワークでの検証の損失と精度

私の問題は、予想通りコードとしてトレーニング損失が減少し、トレーニング精度増加を進行することであるが、検証精度が高い値に間隔および検証損失が大きく変動します。私は以下のトレーニングフェーズのログの一部を添付します。私も、訓練の損失が非常に小さいとき(〜0.01-0.03)、次の時代にそれが増加し、その後再び減少することを観察しています。私が言及しているのは、エポック75-77で見ることができます。しかし一般的にそれは減少します。

私が期待しているのは、トレーニングの精度は常に0.99-1まで上昇し、トレーニングの損失は常に減少するということです。さらに、検証の精度は、おそらく0.4から開始し、例えば0.8に引き上げる必要があります。検証の精度がエポックを超えて改善されない場合、エポック中の待機点は何ですか?また、テスト精度は0.81に近いです。

私も自分のデータで試してみましたが、同じ状況になりました。同様の方法でデータを処理しました。トレーニング、検証、テストポイントがこのサンプルコードのロジックと同じロジックで処理されていることを意味します。

さらに、LSTMから各単語の出力を取得した後、このコードがどのように文全体を表しているかわかりませんでした。それは平均または最大プールを行うか、それをロジスティック回帰分類器に与える前にLSTM層からの最後の出力のみを取るか?

ご協力いただければ幸いです。

Using Theano backend. 
Loading data... 
25000 train sequences 
25000 test sequences 
Pad sequences (samples x time) 
X_train shape: (25000, 80) 
X_test shape: (25000, 80) 
Build model... 
Train... 
Train on 22500 samples, validate on 2500 samples 
Epoch 1/100 
22500/22500 [==============================] - 236s - loss: 0.5438 - acc: 0.7209 - val_loss: 0.4305 - val_acc: 0.8076 
Epoch 2/100 
22500/22500 [==============================] - 237s - loss: 0.3843 - acc: 0.8346 - val_loss: 0.3791 - val_acc: 0.8332 
Epoch 3/100 
22500/22500 [==============================] - 245s - loss: 0.3099 - acc: 0.8716 - val_loss: 0.3736 - val_acc: 0.8440 
Epoch 4/100 
22500/22500 [==============================] - 243s - loss: 0.2458 - acc: 0.9023 - val_loss: 0.4206 - val_acc: 0.8372 
Epoch 5/100 
22500/22500 [==============================] - 239s - loss: 0.2120 - acc: 0.9138 - val_loss: 0.3844 - val_acc: 0.8384 
.... 
.... 
Epoch 75/100 
22500/22500 [==============================] - 238s - loss: 0.0134 - acc: 0.9868 - val_loss: 0.9045 - val_acc: 0.8132 
Epoch 76/100 
22500/22500 [==============================] - 241s - loss: 0.0156 - acc: 0.9845 - val_loss: 0.9078 - val_acc: 0.8211 
Epoch 77/100 
22500/22500 [==============================] - 235s - loss: 0.0129 - acc: 0.9883 - val_loss: 0.9105 - val_acc: 0.8234 

答えて

5
  1. 訓練を停止するには:それは検証データで計算いくつかのメトリックが成長し始めたときに訓練を停止する通常の方法です。オーバーフィットの通常の指標。しかし、ドロップアウトテクニックを使用していることに気付いてください。これは、すべてのエポック時に若干異なるモデルをトレーニングする結果となります。そのため、何らかの忍耐を適用する必要があります。そして、このような現象が数エポックで発生すると、

  2. ゆらぎの理由:最初の点と同じ - ネットワークに何らかのランダム性を導入するドロップアウト技術を使用しています。これは私の意見では、変動の主な理由が観察されています。あなたは慎重に使用すると、デフォルトの引数としてreturn_sequences=Falseセットに気づくでしょうLSTM/RNN層のマニュアルを参照して勉強すれば:Kerasモデルは緻密層への入力として取る何

  3. 。これは、処理されたシーケンスからの最後の出力のみが、後続のレイヤーへの入力とみなされることを意味します。 1-D Convolutionsを使ってそれを変更することができます。

関連する問題