我有一个二分类问题。我使用以下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
之后使用flatten()
层是否会有帮助。
无论如何,由于我是深度学习的新手,我不太确定如何使这个模型更好。
如果需要,我很乐意提供更多细节。
回答:
这是我的建议
-
移除所有防止过拟合的元素,如Dropout和正则化器。可能的情况是,您的模型无法使用给定的层捕捉数据的复杂性,因此您需要确保您的模型能够先过拟合,然后再添加正则化器。
-
现在尝试增加Dense层的数量和每层的神经元数量,直到您看到一些改进。也有可能您的数据太嘈杂,或者您只有少量数据来训练模型,因此无法生成有用的预测。
-
现在如果您幸运并且可以看到过拟合,您可以添加Dropout和正则化器。
因为每个神经网络都是基于梯度的算法,您可能会陷入局部最小值。您可能需要多次运行算法,使用不同的初始权重,才能得到好的结果,或者您可以更改损失函数,使其成为一个凸问题,其中局部最小值即为全局最小值。
如果您无法获得更好的结果
您可能需要尝试不同的拓扑结构,因为LSTM只是试图建模一个假设具有马尔可夫特性的系统。您可以查看嵌套LSTM或类似的东西,这些模型系统的方式是下一个时间步不仅仅依赖于当前时间步。