ValueError:层equential_40的输入0与该层不兼容:预期min_ndim = 3,发现ndim = 2。收到完整形状:(无,58)

问题描述 投票:0回答:1

我正在研究有关学生在课程中表现的数据集,我想根据学生上一年的成绩来预测学生的水平(低、中、高)。我正在使用 CNN 来实现此目的,但是当我构建并拟合模型时,我收到此错误:

ValueError: Input 0 of layer sequential_40 is incompatible with the layer: : expected min_ndim=3, found ndim=2. Full shape received: (None, 58)

这是代码:

#reshaping data
X_train = X_train.reshape((X_train.shape[0], X_train.shape[1]))
X_test = X_test.reshape((X_test.shape[0], X_test.shape[1])) 

#checking the shape after reshaping
print(X_train.shape)
print(X_test.shape)

#normalizing the pixel values
X_train=X_train/255
X_test=X_test/255

#defining model
model=Sequential()

#adding convolution layer
model.add(Conv1D(32,3, activation='relu',input_shape=(28,1)))

#adding pooling layer
model.add(MaxPool1D(pool_size=2))

#adding fully connected layer
model.add(Flatten())
model.add(Dense(100,activation='relu'))

#adding output layer
model.add(Dense(10,activation='softmax'))

#compiling the model
model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

model.summary()

#fitting the model
model.fit(X_train,y_train,epochs=10)

这是输出:

Model: "sequential_40"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d_23 (Conv1D)           (None, 9, 32)             128       
_________________________________________________________________
max_pooling1d_19 (MaxPooling (None, 4, 32)             0         
_________________________________________________________________
flatten_15 (Flatten)         (None, 128)               0         
_________________________________________________________________
dense_30 (Dense)             (None, 100)               12900     
_________________________________________________________________
dense_31 (Dense)             (None, 10)                1010      
=================================================================
Total params: 14,038
Trainable params: 14,038
Non-trainable params: 0
tensorflow machine-learning keras conv-neural-network
1个回答
0
投票

您应该如下重塑您的训练数据:

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

通过这样做,您只需向输入添加一个维度。那么你的输入形状将类似于 (None, X_train.shape[1], 1)。

© www.soinside.com 2019 - 2024. All rights reserved.