如何在python中处理具有许多特性的LSTM?

2024-09-28 21:15:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个二进制分类问题。我使用以下keras模型进行分类

input1 = Input(shape=(25,6))
x1 = LSTM(200)(input1)
input2 = Input(shape=(24,6))
x2 = LSTM(200)(input2)
input3 = Input(shape=(21,6))
x3 = LSTM(200)(input3)
input4 = Input(shape=(20,6))
x4 = LSTM(200)(input4)
x = concatenate([x1,x2,x3,x4])
x = Dropout(0.2)(x)
x = Dense(200)(x)
x = Dropout(0.2)(x)
output = Dense(1, activation='sigmoid')(x)

然而,我得到的结果非常糟糕。我认为原因是我有太多的功能,因此,需要在concatenate之后有更多的改进层。
我还在想,在concatenate之后使用flatte()层是否有帮助。
无论如何,因为我是一个新的深入学习,我不太确定如何使这成为一个更好的模式

如果需要,我很乐意提供更多细节


Tags: input分类dropoutdensex1x2shapelstm
2条回答

输出层前面的Dropout可能会有问题。我建议删除Dropout层并评估性能,然后在模型在训练集上表现良好时重新引入正则化

以下是我的建议

  1. 移除所有防止过度装配的东西,例如脱落和正则化器。可能发生的情况是,您的模型可能无法使用给定的层捕获数据的复杂性,因此在添加正则化器之前,您需要确保您的模型能够首先进行过度拟合

  2. 现在试着增加致密层的数量和每层神经元的数量,直到你们能看到一些改善。还有一种可能是您的数据太过嘈杂,或者您只有很少的数据来训练模型,因此您甚至无法生成有用的预测

  3. 现在,如果您是幸运的,并且您可以看到过度拟合,您可以添加Dropout和regularizer

因为每个神经网络都是基于梯度的算法,所以最终可能会达到局部最小值。您可能还需要使用不同的初始权重多次运行该算法,然后才能获得好的结果,或者您可以更改损失函数,这样您就有了一个凸问题,其中局部最小值是全局最小值

如果你不能取得更好的结果

您可能需要尝试不同的拓扑,因为LSTM只是尝试对假定具有马尔可夫特性的系统建模。您可以查看嵌套的LSTM或类似的东西,它以一种方式对系统进行建模,即下一时间步不仅仅依赖于当前时间步

相关问题 更多 >