无法用 keras 构建一个用于向量的 CNN - 维度问题



假设我用Keras构建了一个非常简单的CNN来对向量进行分类。

我的输入(X_train(是一个矩阵,其中每一行都是一个向量,每一列都是一个特征。我的输入标签 (y_train( 是矩阵,其中每行都是一个热编码向量。这是一个二元分类器。

我的CNN构建如下:

model = Sequential()
model.add(Conv1D(64,3))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dense(2))
model.add(Activation('sigmoid'))
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', matrics = 
['accuracy'])
model.fit(X_train,y_train,batch_size = 32)

但是当我尝试运行此代码时,我收到此错误消息:

Input 0 is incompatible with layer conv1d_23: expected ndim=3, found 
ndim=2

为什么 Keras 期望 3 个 dims?一个 dim 用于样本,一个 dim 用于功能。更重要的是,我该如何解决这个问题?

X_train的形状应该是:(batch_size,步骤,input_dim(,请参阅文档。您似乎缺少其中一个维度。 我猜input_dim在你的情况下是 1,这就是它丢失的原因。如果是这样,请将

model.fit

行到

model.fit(tf.expand_dims(X_train,-1), y_train,batch_size = 32)

您的代码不是一个最小的工作示例,所以我无法验证这是否是唯一的问题,但这应该有望解决您当前的错误消息。

Conv1D图层需要形状为(samples, width, channels)的输入,因此这与您的输入数据不匹配,从而产生错误。

卷积操作是在width维上完成的,因此假设您要对所谓的特征进行卷积,那么您应该重塑数据以添加值为 1 的虚拟channels维度:

X_train = X_train.reshape((X_train.shape[0], X_train.shape[1], 1))

最新更新