gpt4 book ai didi

python - TimeDistributed 层的 CNN-LSTM 时间序列输入

转载 作者:行者123 更新时间:2023-12-04 15:23:09 25 4
gpt4 key购买 nike

我创建了一个 CNN-LSTM 用于网络 session 的生存预测,我的训练数据如下所示:

print(x_train.shape)
(288, 3, 393)

使用(样本、时间步长、特征)和我的模型:

model = Sequential()
model.add(TimeDistributed(Conv1D(128, 5, activation='relu'),
input_shape=(x_train.shape[1], x_train.shape[2])))
model.add(TimeDistributed(MaxPooling1D()))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(64, stateful=True, return_sequences=True))
model.add(LSTM(16, stateful=True))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer=Adam(lr=0.001), loss='binary_crossentropy', metrics=['accuracy'])

但是,TimeDistributed 层至少需要 3 个维度,我应该如何转换数据才能使其正常工作?

非常感谢!

最佳答案

您的数据是 3d 格式的,这就是您需要提供给 conv1d 或 LSTM 的全部内容。如果您的目标是 2D,请记得在最后一个 LSTM 单元格中设置 return_sequences=False。

在 LSTM 之前使用展平是错误的,因为您正在破坏 3D 维度

还要注意池化操作,以免减少负时间维度(我在上面的卷积中使用“相同”填充以避免这种情况)

下面是一个二元分类任务的例子

n_sample, time_step, n_features = 288, 3, 393
X = np.random.uniform(0,1, (n_sample, time_step, n_features))
y = np.random.randint(0,2, n_sample)

model = Sequential()
model.add(Conv1D(128, 5, padding='same', activation='relu',
input_shape=(time_step, n_features)))
model.add(MaxPooling1D())
model.add(LSTM(64, return_sequences=True))
model.add(LSTM(16, return_sequences=False))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(X,y, epochs=3)

关于python - TimeDistributed 层的 CNN-LSTM 时间序列输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62875072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com