Python-Keras ShapeError使用CNN解决6类分类问题



我正在尝试创建一个CNN来在6个不同的类之间进行分类

我有一个不同的脚本,它只是将图像+标签保存到列表中,然后保存到pickle中。

我的错误是

ValueError: Shapes (None, 6) and (None, 100, 100, 1, 6) are incompatible

这就是数据加载+转换为numpy数组的方式

#Load Saved Data
pickle_in = open("XTrain.pickle","rb")
XTrain = pickle.load(pickle_in)
pickle_in = open("XTest.pickle","rb")
XTest = pickle.load(pickle_in)
pickle_in = open("yTrain.pickle","rb")
yTrain = pickle.load(pickle_in)
pickle_in = open("yTest.pickle","rb")
yTest = pickle.load(pickle_in)
#Convert To Float to Normalize
XTrain = XTrain.astype('float32')
XTest = XTest.astype('float32')
#Normalize
XTrain = XTrain/255
XTest = XTest/255
#Convert
XTrain = np.array(XTrain)
XTest = np.array(XTest)
yTrain = np.array(yTrain)
yTest = np.array(yTest)
#Categorical
yTrain = to_categorical(yTrain, 6)
yTest = to_categorical(yTest, 6)

Shape of labels is : (2700, 6)
Shape of images is : (2700, 100, 100, 1)

这是我的CNN

model = keras.Sequential([
    keras.layers.Dense(512, input_shape=(XTrain.shape), activation='relu'),
    keras.layers.Dense(256, activation='relu'),
    keras.layers.Dense(6, activation='softmax')
])
model.compile(optimizer='adam',
              loss=keras.losses.CategoricalCrossentropy(),
              metrics=['accuracy'])
model.fit(XTrain, yTrain, epochs=50, batch_size=32)

究竟是什么引发了错误?我仍在学习tensorflow/keras,并遵循教程,但它们都会导致不同的错误。

这有两个主要原因:

  • 您必须对标签进行明确编码(首先使用标签编码器,然后使用One-Hot编码器(
  • 您的input_shape错误。您使用的是4D形状,而应该是3D形状。应该是这样的input_shape=(100,100,1)

最新更新