ValueError:检查目标时出错:预期density_20具有形状(1,),但数组的形状为(2,)

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

因此,我尝试使用keras CNN进行二进制分类。尝试将模型拟合到生成器时出现以下错误。这是生成器:

image_gen = ImageDataGenerator(
    rotation_range=30, 
    width_shift_range=0.1,
    height_shift_range=0.1, 
    horizontal_flip=True,
    rescale=1/255)

training_generator = image_gen.flow_from_directory('dataset/DATASET/TRAIN',target_size=(300,300))

这是我的模特:

model = Sequential()

model.add(Conv2D(filters=32,kernel_size=(4,4),input_shape=(300,300,3),activation='relu'))
model.add(Conv2D(filters=32,kernel_size=(4,4),input_shape=(300,300),activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(filters=64,kernel_size=(3,3),input_shape=(300,300,3),activation='relu'))
model.add(Conv2D(filters=64,kernel_size=(3,3),input_shape=(300,300,3),activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Flatten())

model.add(Dense(units=128,activation='relu'))
model.add(Dense(units=64,activation='relu'))
model.add(Dropout(rate=0.35))
model.add(Dense(units=32,activation='relu'))
model.add(Dense(units=1,activation='sigmoid'))

model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit_generator(training_generator,epochs=5)

这里是错误:ValueError:检查目标时出错:预期density_24具有形状(1,),但数组的形状为(2,)]

我已附上模型摘要的屏幕截图enter image description here

提前感谢!

python keras deep-learning conv-neural-network image-recognition
1个回答
0
投票

此错误特定于二进制分类,其中使用ImageDataGenerator而不将class_mode指定为“二进制”。

在下面的行中,如上所述,您需要添加class_mode

training_generator = image_gen.flow_from_directory('dataset/DATASET/TRAIN',target_size=(300,300),class_mode='binary')

class_mode必须指定为二进制分类。如果您使用的是keras,则会抛出错误,提示expected dense_2 to have shape (1,) but got array with shape (2,)

如果使用的是tf.keras,它将NOT引发错误,但分类准确度将显示为50%。

我已采用cats vs dogs二进制分类示例来演示此问题。完整代码为here

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