我有一个二进制分类问题。我使用以下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()层是否有帮助。
无论如何,因为我是一个新的深入学习,我不太确定如何使这成为一个更好的模式
如果需要,我很乐意提供更多细节
输出层前面的
Dropout
可能会有问题。我建议删除Dropout
层并评估性能,然后在模型在训练集上表现良好时重新引入正则化以下是我的建议
移除所有防止过度装配的东西,例如脱落和正则化器。可能发生的情况是,您的模型可能无法使用给定的层捕获数据的复杂性,因此在添加正则化器之前,您需要确保您的模型能够首先进行过度拟合
现在试着增加致密层的数量和每层神经元的数量,直到你们能看到一些改善。还有一种可能是您的数据太过嘈杂,或者您只有很少的数据来训练模型,因此您甚至无法生成有用的预测
现在,如果您是幸运的,并且您可以看到过度拟合,您可以添加Dropout和regularizer
因为每个神经网络都是基于梯度的算法,所以最终可能会达到局部最小值。您可能还需要使用不同的初始权重多次运行该算法,然后才能获得好的结果,或者您可以更改损失函数,这样您就有了一个凸问题,其中局部最小值是全局最小值
如果你不能取得更好的结果
您可能需要尝试不同的拓扑,因为LSTM只是尝试对假定具有马尔可夫特性的系统建模。您可以查看嵌套的LSTM或类似的东西,它以一种方式对系统进行建模,即下一时间步不仅仅依赖于当前时间步
相关问题 更多 >
编程相关推荐