gpt4 book ai didi

keras - 使用 keras 中的 CNN-LSTM 模型进行序列到序列分类

转载 作者:行者123 更新时间:2023-12-04 08:46:20 30 4
gpt4 key购买 nike

我正在处理 1000 个样本。每个样本都与在 168 个不同时间步长测量的具有 70 个不同生命体征和健康特征的人相关联。然后,对于每个时间步,我应该预测一个二元标签。因此,输入和输出形状为:

Input.shape = (1000, 168, 70)
Output.shape = (1000, 168, 1)
目标是使用 CNN 提取特征,然后将 LSTM 应用于时间信息。然后我想应用一个密集层进行二元分类。我想为这个任务应用 CNN-LSTM 模型。
以下是我试过的代码。
model = Sequential()                        
model.add(Conv1D(filters=16, kernel_size=5, strides=1, padding="same", input_shape=(168, 70), activation='relu'))
model.add(MaxPooling1D())
model.add(LSTM(64, return_sequences=True))
model.add(Dense(1, activation="sigmoid"))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train_3D, Y_train_3D, batch_size=32, epochs=500, validation_data=(X_val_3D, Y_val_3D))
我是这个模型的应用程序的新手,所以我确定我在这里做错了什么,我找不到。这是错误:
ValueError: logits and labels must have the same shape ((None, 84, 1) vs (None, 168, 1))
任何帮助表示赞赏。

最佳答案

由于您使用的是 return_sequences=True ,这意味着 LSTM将返回形状为 (batch_size, 84, 64) 的输出. 84这是由于 Conv1D您使用的参数。所以当你申请时Dense层与 1单位,它将最后一个维度减少到 1 ,这意味着 (batch_size, 84, 64)会变成(batch_size, 84, 1)之后 Dense层应用。你要么不应该使用 return_sequences=True或使用另一层/层将输出展平为二维,然后再将其提供给 Dense层。

关于keras - 使用 keras 中的 CNN-LSTM 模型进行序列到序列分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64296624/

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