ValueError: Error when checking target: expected dense_20 to have shape (1,) but got array with shape (2,)
ValueError: Error when checking target: expected dense_20 to have shape (1,) but got array with shape (2,)
所以我正在尝试使用 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:检查目标时出错:预期 dense_24 具有形状 (1,) 但得到形状为 (2,)
的数组
我附上了模型摘要的屏幕截图
提前致谢!
此错误特定于二进制分类,其中使用 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,那么它 不会 抛出错误,但分类准确度将显示为 50%。
我已经使用 cats vs dogs
二元分类示例来演示这个问题。完整代码是 here.
所以我正在尝试使用 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:检查目标时出错:预期 dense_24 具有形状 (1,) 但得到形状为 (2,)
的数组我附上了模型摘要的屏幕截图
提前致谢!
此错误特定于二进制分类,其中使用 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,那么它 不会 抛出错误,但分类准确度将显示为 50%。
我已经使用 cats vs dogs
二元分类示例来演示这个问题。完整代码是 here.