如何在时间序列分类中结合使用LSTM和CNN

通常情况下,CNN主要用于处理图像数据。然而,我发现CNN有时也被用于时间序列数据。因此,我尝试分别使用LSTM和CNN模型来解决我的时间序列分类问题。我的两个模型如下所示。

LSTM:

model = Sequential()model.add(LSTM(200, input_shape=(25,3)))model.add(Dense(100))model.add(Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

CNN:

model = Sequential()model.add(Conv1D(200, kernel_size=3, input_shape=(25,3)))model.add(Conv1D(200, kernel_size=2))model.add(GlobalMaxPooling1D())model.add(Dense(100))model.add(Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

我认为LSTM和CNN各有其独特的特性,将它们结合用于我的预测可能会产生更好的结果。然而,我在寻找适合我问题的资源时遇到了困难。

这种方法对我的问题来说可行吗?如果可行,我该如何操作?这样做会产生更好的结果吗?

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

编辑:

我的问题设置如下。我有一个包含约5000个数据点的数据集。每个数据点包含3个时间序列数据,每个序列大小为25。我的标签数据是10(即二元分类)。更具体地说,我的数据集如下所示。

node, time-series1, time_series2, time_series3, Labeln1, [1.2, 2.5, 3.7, 4.2, ... 5.6, 8.8], [6.2, 5.2, 4.7, 3.2, ... 2.6, 1.8], [1.0, 2.8, 3.9, 4.1, ... 5.2, 8.6] …, 1n2, [5.2, 4.5, 3.7, 2.2, ... 1.6, 0.8], [8.2, 7.5, 6.7, 5.2, ... 4.6, 1.8], …, [1.2, 2.5, 3.7, 4.2, ... 5.2, 8.5] 0依此类推。

我将这些数据输入到我的LSTM和CNN模型中。


回答:

你有没有尝试过简单地将一层放在另一层之后?这听起来很标准…

model = Sequential()model.add(Conv1D(200, kernel_size=3, activation = useSomething, input_shape=(25,3)))model.add(LSTM(200))model.add(Dense(100))model.add(Dense(1, activation='sigmoid'))

你想尝试相反的顺序吗?

model = Sequential()model.add(LSTM(200, return_sequences=True, input_shape=(25,3)))model.add(Conv1D(200, kernel_size=3, activation = useSomething))model.add(GlobalMaxPooling1D())model.add(Dense(100))model.add(Dense(1, activation='sigmoid'))

你想要一个庞大的模型吗?

model = Sequential()model.add(Conv1D(15, kernel_size=3, activation = useSomething, input_shape=(25,3)))model.add(LSTM(30, return_sequences=True))model.add(Conv1D(70, kernel_size=3, activation = useSomething))............model.add(LSTM(100))model.add(Dense(100))model.add(Dense(1, activation='sigmoid'))

尝试多种方法:

  • 卷积层, LSTM层
  • LSTM层, 卷积层
  • 卷积层, 卷积层, .., 卷积层, LSTM层, …, LSTM层
  • LSTM层, LSTM层, …, 卷积层, 卷积层, ….
  • 卷积层, LSTM层, 卷积层, LSTM层, 卷积层, LSTM层, ….
  • LSTM层, 卷积层, LSTM层, 卷积层, LSTM层, 卷积层, ….
  • 卷积层, 卷积层, LSTM层, LSTM层, 卷积层, 卷积层, ….

双向模型如何?

inputs = Input((25,3))side1 = Bidirectional(LSTM(100, return_sequences=True))(inputs) #总共200个单元side2 = Conv1D(200, activation = 'tanh', padding = 'same')(inputs) #相同的激活函数                                                                    #相同的长度merged = Add()([side1, side2])      #或者如果单元/通道/特征数不同,使用Concatenate()([side1, side2])outputs = Conv1D(200)(merged)outputs = GlobalMaxPooling1D()(outputs)outputs = Dense(100)(outputs)outputs = Dense(1, activation='sigmoid')(outputs)model = Model(inputs, outputs)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注