首页 > 解决方案 > ValueError:检查目标时出错:预期dense_20的形状为(4,),但数组的形状为(3,)

问题描述

我已经阅读了其他堆栈溢出,但它并没有满足我的问题。我正在做对象定位,我希望我的模型产生四个输出,它们是边界框的 x1、y1、x2、y2。但它一直向我显示价值错误。是我的模型有问题还是我的数据集有问题?模型:

model = keras.Sequential([
keras.layers.Conv2D(32,(3,3),padding = 'same' ,activation = 'relu', input_shape= (image_width,image_height,image_channels)),
keras.layers.MaxPooling2D(pool_size = (2,2)),
keras.layers.Dropout(0.25),
keras.layers.Conv2D(64,(3,3),padding = 'same',activation = 'relu'),
keras.layers.MaxPooling2D(pool_size = (2,2)),
keras.layers.Dropout(0.25),
keras.layers.Conv2D(64,(3,3),padding = "same",activation = 'relu'),
keras.layers.MaxPooling2D(pool_size = (2,2)),
keras.layers.Dropout(0.25),
keras.layers.Flatten(),
keras.layers.Dense(256, activation = 'relu'),
keras.layers.Dropout(0.25),
keras.layers.Dense(4,activation="relu")
])
model.compile(loss="mse", optimizer='adam', metrics=['accuracy'])

训练和验证数据生成器:

train_datagen = ImageDataGenerator(
rotation_range = 15,
rescale = 1./255,
shear_range = 0.1,
zoom_range = 0.2,
horizontal_flip = True,
width_shift_range = 0.1,
height_shift_range = 0.1
)
train_generator = train_datagen.flow_from_dataframe(
dataframe = train_df,
directory = "/mydrive/Object-Classification-and-Localization-with-TensorFlow-master/training_images",
x_col = 'filename',
y_col = 'name',
target_size = (128,128),
class_mode = 'categorical',
batch_size = batch_size
)
validation_datagen = ImageDataGenerator(rescale = 1./255)
validation_generator = validation_datagen.flow_from_dataframe(
dataframe = validate_df,
directory = "/mydrive/Object-Classification-and-Localization-with-TensorFlow-master/training_images",
x_col = 'filename',
y_col = 'name',
target_size = (128,128),
class_mode = 'categorical',
batch_size = batch_size
)

数据集格式(数据框的总形状 = (1488,9)):

    filename        width   height  depth   name    xmin    ymin    xmax    ymax
    cucumber_1.jpg  227      227     3     cucumber  23      42      206    199

标签: neural-networkconv-neural-network

解决方案


推荐阅读