如何在python中处理具有许多特性的LSTM?
我有一个二进制分类问题。我使用以下keras模型进行分类如何在python中处理具有许多特性的LSTM?,python,machine-learning,keras,classification,lstm,Python,Machine Learning,Keras,Classification,Lstm,我有一个二进制分类问题。我使用以下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 = concatena
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)
然而,我得到的结果非常糟糕。我认为原因是我有太多的功能,因此,需要在连接后有更多的改进层
我还在想,在连接后使用flatte()层是否有帮助
无论如何,因为我是一个新的深入学习,我不太确定如何使这成为一个更好的模式
如果需要,我很乐意提供更多细节。在输出层之前退出的可能会有问题。我建议删除退出
层和评估性能,然后在模型在训练集中表现良好时重新引入正则化
移除所有防止过度装配的东西,例如脱落和正则化器。可能发生的情况是,您的模型可能无法使用给定的层捕获数据的复杂性,因此在添加正则化器之前,您需要确保您的模型能够首先进行过度拟合
现在试着增加致密层的数量和每层神经元的数量,直到你们能看到一些改善。还有一种可能是您的数据太过嘈杂,或者您只有很少的数据来训练模型,因此您甚至无法生成有用的预测
现在,如果您是幸运的,并且您可以看到过度拟合,您可以添加Dropout和regularizer
因为每个神经网络都是基于梯度的算法,所以最终可能会达到局部最小值。您可能还需要使用不同的初始权重多次运行该算法,然后才能获得好的结果,或者您可以更改损失函数,这样您就有了一个凸问题,其中局部最小值是全局最小值
如果你不能取得更好的结果
您可能需要尝试不同的拓扑,因为LSTM只是尝试对假定具有马尔可夫特性的系统建模。您可以查看嵌套的LSTM或类似的东西,它以这样的方式对系统进行建模,即下一个时间步不仅仅取决于当前时间步。非常感谢您的回答。什么是规范化?有没有可能告诉我如何用python对我的模型进行正则化?对不起,正则化是一种在模型中加入惩罚项的方法,有助于避免过度拟合。澄清一下,辍学是正规化的一种形式。我的意思是,一旦模型表现良好,你可以重新引入辍学。但一般来说,如果你想引入其他形式的正则化,比如L2或L1,在Keras中很容易——文档中描述得很好:。嗨,以防万一,如果你有时间,请告诉我你对这个问题的想法:)