如何处理具有 python 中许多特征的 LSTM?
How to handle LSTMs with many features in 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
.
之后使用 flatten() 层是否有帮助
无论如何,由于我是深度学习的新手,我不太确定如何使它成为一个更好的模型。
如果需要,我很乐意提供更多详细信息。
输出层之前的Dropout
可能有问题。我建议删除两个 Dropout
层并评估性能,然后在模型在训练集上表现良好后重新引入正则化。
以下是我的建议
删除所有防止过度拟合的东西,例如 Dropout 和正则化器。可能发生的情况是您的模型可能无法使用给定层捕获数据的复杂性,因此您需要确保您的模型能够在添加正则化器之前先过拟合。
现在尝试增加密集层的数量和每层中的神经元数量,直到您看到一些改进。也有可能是你的数据太嘈杂,或者你只有很少的数据来训练模型,所以你甚至不能产生有用的预测。
现在如果你幸运并且你可以看到过度拟合,你可以添加Dropout和regularizer。
因为每个神经网络都是基于梯度的算法,所以您可能会在局部最小值处结束。您可能还需要 运行 算法多次使用不同的初始权重才能获得良好的结果,或者您可以更改损失函数,以便您遇到局部最小值是全局最小值的凸问题。
如果不能达到更好的效果
您可能需要尝试不同的拓扑结构,因为 LSTM 只是试图对假设具有马尔可夫 属性 的系统建模。你可以看看 nested-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 = 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
可能有问题。我建议删除两个 Dropout
层并评估性能,然后在模型在训练集上表现良好后重新引入正则化。
以下是我的建议
删除所有防止过度拟合的东西,例如 Dropout 和正则化器。可能发生的情况是您的模型可能无法使用给定层捕获数据的复杂性,因此您需要确保您的模型能够在添加正则化器之前先过拟合。
现在尝试增加密集层的数量和每层中的神经元数量,直到您看到一些改进。也有可能是你的数据太嘈杂,或者你只有很少的数据来训练模型,所以你甚至不能产生有用的预测。
现在如果你幸运并且你可以看到过度拟合,你可以添加Dropout和regularizer。
因为每个神经网络都是基于梯度的算法,所以您可能会在局部最小值处结束。您可能还需要 运行 算法多次使用不同的初始权重才能获得良好的结果,或者您可以更改损失函数,以便您遇到局部最小值是全局最小值的凸问题。
如果不能达到更好的效果
您可能需要尝试不同的拓扑结构,因为 LSTM 只是试图对假设具有马尔可夫 属性 的系统建模。你可以看看 nested-LSTM 或类似的东西,它以下一个时间步长不仅仅取决于当前时间步长的方式对系统进行建模。