小编Ers*_*sin的帖子

具有Keras的LSTM网络中的验证损失和准确性

我运行在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 …
Run Code Online (Sandbox Code Playgroud)

neural-network deep-learning lstm keras recurrent-neural-network

6
推荐指数
1
解决办法
7697
查看次数

Keras中具有屏蔽支持的平均池或最大池

...
print('Build model...')
model = Sequential()
model.add(Embedding(max_features, 128))
model.add(LSTM(size, return_sequences=True, dropout_W=0.2 dropout_U=0.2)) 
model.add(GlobalAveragePooling1D())
model.add(Dense(1))
model.add(Activation('sigmoid'))
....
Run Code Online (Sandbox Code Playgroud)

我需要能够在LSTM层之后的样本中获取所有时间步长的向量的平均值或最大值,然后再将该平均值或最大值提供给Keras中的密集层。

我认为timedistributedmerge能够做到这一点,但已被弃用。使用return_sequences=TrueI可以获取LSTM层之后的样本中所有时间步骤的向量。但是,GlobalAveragePooling1D()它与屏蔽不兼容,它考虑了所有时间步长,而我只需要非屏蔽时间步长。

我看到了推荐该Lambda图层的帖子,但这些帖子也没有考虑遮罩。任何帮助,将不胜感激。

python pooling masking lstm keras

5
推荐指数
1
解决办法
4367
查看次数