从1D数据构建2D-CNN时输入形状错误:Keras
我有一个大小为100×50(10050d特征)的数据矩阵,来自5个类。通过将数据矩阵重塑为从1D数据构建2D-CNN时输入形状错误:Keras,keras,Keras,我有一个大小为100×50(10050d特征)的数据矩阵,来自5个类。通过将数据矩阵重塑为 X=X.reshape(X.shape[0],1,X.shape[1],1) 因此,我的输入形状将是 inpshape= (1,1, X.shape[1]) 接下来,我将CNN定义为 # build model model.add(Conv2D(32, (3, 3), padding='same',input_shape=inpshape )) model.add(Activation('relu')
X=X.reshape(X.shape[0],1,X.shape[1],1)
因此,我的输入形状将是
inpshape= (1,1, X.shape[1])
接下来,我将CNN定义为
# build model
model.add(Conv2D(32, (3, 3), padding='same',input_shape=inpshape ))
model.add(Activation('relu'))
.
.
.
然而,我得到了错误
Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=2
我将一维数据视为二维数据是否错误?
如果是,我如何用数据实现1D conv网络
----------------------更新------------------------------------- 下面是我用一个conv层编写的代码:
from keras.layers import Conv2D, GlobalMaxPooling2D
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.optimizers import Adam
num_labels = y.shape[1]
X=X.reshape(X.shape[0],1,X.shape[1],1)
inpshape= (1,1, X.shape[1])
print(X.shape)
# build model
model.add(Conv2D(32, (1, 3), padding='same',input_shape=inpshape ))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(300))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_labels))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', metrics=['accuracy'],optimizer='Adam')
错误:输入0与层conv2d_1不兼容:预期ndim=4,发现ndim=2在添加层之前,请确保已初始化模型
model=Sequential()
看起来您正在向已训练的模型添加层。为什么要使用二维卷积?如果维度已为1,则使用(3,3)过滤器大小不会提供与(1,3)相比的任何额外信息。@McLawrence(3,3)只是一个数字。我想了解错误。即使(1,3)也不起作用。我甚至在数据上尝试了Conv1D层,但还是出现了一个或另一个输入错误。我正在尝试2D,因为我读到ID conv被编程为更好地处理时序数据,就像时间序列预测一样。我无法使用给定的输入形状和命名的层来重现错误。你能发布你的整个模型配置吗。您使用的是哪个版本的
keras
?形状中的与第一行中使用的形状不匹配。您交换了1
和X.shape[1]
。但是,这给了我另一个版本2.0.8
的错误。您能提供完整的代码吗?可能错误在另一个地方。@McLawrence我使用的是python 3.6、keras 2.0.6和tensorflow后端