LSTM网络不从序列中学习。使用Keras,TF后端进行不足或过度拟合

问题描述 投票:1回答:1

在此先感谢您的帮助。

我正在处理4个字符序列的问题。我在训练集中有大约18.000个序列。使用Keras + TensorFlow后端。要预测的可能字符总数为52。

当我使用你在下面的“网络A”中看到大约490K参数的网络来学习时,网络极度过度拟合,验证损失就像疯狂一样增加,即使在300个时代也是如此。无论哪种方式,验证准确性都不会达到20%。

当我使用下面的“网络B”时,要学习大约8K参数,网络似乎没有学习。即使在3000个时期内,训练数据的准确度也不会超过40%,而验证集的准确率不会超过10%。

我在中间尝试了很多配置而没有任何真正的成功。

你有什么建议吗?

两种情况都使用以下配置:

rms = keras.optimizers.RMSprop(lr=0.01, rho=0.9, epsilon=None, decay=0.0)

model.compile(loss='categorical_crossentropy', optimizer=rms,  metrics=['accuracy'])

网络A.

Shape of input matrix:
    4 1
Shape of Output:
    57    

Layer (type)                 Output Shape              Param #   
=================================================================
lstm_3 (LSTM)                (None, 4, 256)            264192    
_________________________________________________________________
dropout_2 (Dropout)          (None, 4, 256)            0         
_________________________________________________________________
lstm_4 (LSTM)                (None, 4, 128)            197120    
_________________________________________________________________
dropout_3 (Dropout)          (None, 4, 128)            0         
_________________________________________________________________
lstm_5 (LSTM)                (None, 32)                20608     
_________________________________________________________________
dense_1 (Dense)              (None, 128)               4224      
_________________________________________________________________
dropout_4 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 57)                7353      
_________________________________________________________________
activation_1 (Activation)    (None, 57)                0         
=================================================================
Total params: 493,497
Trainable params: 493,497
Non-trainable params: 0

“网络B”

Shape of input matrix:
4 1
Shape of Output:
57
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_6 (LSTM)                (None, 4, 32)             4352      
_________________________________________________________________
dropout_5 (Dropout)          (None, 4, 32)             0         
_________________________________________________________________
lstm_7 (LSTM)                (None, 16)                3136      
_________________________________________________________________
dropout_6 (Dropout)          (None, 16)                0         
_________________________________________________________________
dense_3 (Dense)              (None, 57)                969       
_________________________________________________________________
activation_2 (Activation)    (None, 57)                0         
=================================================================
Total params: 8,457
Trainable params: 8,457
Non-trainable params: 0
tensorflow keras deep-learning lstm recurrent-neural-network
1个回答
0
投票

我可以看到你的输入形状是“4x1”并且你直接将它输入到你的LSTM,输入的格式是什么?因为在这里似乎每个时间步(对于每个字符)你的维度为1(所以也许你只是传递了一个int?)。

正如您所说,您正在处理4个字符的序列,您必须将它们视为分类变量并以适当的方式对它们进行编码。

例如,你可以对它们进行单热编码,或者使用EmbeddingLayer将它们嵌入到某个维度。

© www.soinside.com 2019 - 2024. All rights reserved.