【发布时间】:2016-09-13 17:03:30
【问题描述】:
我为在 Keras 中使用 imdb 数据集的 LSTM 网络运行示例代码。可以在以下链接中找到代码。 imdb_lstm.py
我的问题是,随着代码的进行,训练损失会减少,训练准确度会按预期增加,但验证准确度会在一段时间内波动,验证损失会增加到很高的值。我在下面附上训练阶段的部分日志。甚至我观察到,当训练损失非常小(~ 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
【问题讨论】:
标签: neural-network deep-learning keras lstm recurrent-neural-network