如何解决CNN-LSTM模型在喀拉拉邦的序列到序列分类
我正在处理1000个样本。每个样本都与一个人相关,该人在168个不同的时间步长中具有70种不同的生命体征和健康特征。然后,对于每个时间步长,我都应该预测一个二进制标签。因此,输入和输出形状为:
Input.shape = (1000,168,70)
Output.shape = (1000,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,1))
感谢您的帮助。
解决方法
由于您使用的是return_sequences=True
,因此LSTM
将返回形状为(batch_size,84,64)
的输出。这里的84
来自您使用的Conv1D
参数。因此,当您以Dense
个单位应用1
层时,它将最后一个尺寸减小为1
,这意味着(batch_size,64)
将在(batch_size,1)
之后变成Dense
层应用程序。在将输出馈送到return_sequences=True
层之前,您不应该使用Dense
或使用另一个或多个图层将输出展平为2维。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。