ValueError:使用 ImageDataGenerator 拟合时形状不兼容

数据挖掘 喀拉斯 图像预处理 重塑
2022-03-03 05:44:53

ValueError: Shapes (None, 1) and (None, 3) are incompatible训练我的顺序模型时出现此错误。我无法弄清楚哪些形状实际上是不兼容的。这是我第一次做图像分类。这是我的代码:

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D((2, 2)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(3, activation='softmax'))

model.summary()

model.compile(optimizer='rmsprop',
  loss='categorical_crossentropy',
  metrics=['accuracy'])

# this throws value error
model.fit(
  train_generator,
  steps_per_epoch=25,
  epochs=20,
  validation_data=valid_generator,
  validation_steps=5,
  verbose=2
)

我希望最后一个 Dense 层返回一个包含 3 个概率分数(大、中、小)的数组。

这是我创建train_generatorand的方法valid_generator

from tensorflow.keras.preprocessing.image import ImageDataGenerator
image_datagen = ImageDataGenerator(
  rescale=1./255,
  rotation_range=20,
  horizontal_flip=True,
  shear_range = 0.2,
  fill_mode = 'nearest')

index = len(df)//10
df_train = df[index:]
df_valid = df[:index]

train_generator = image_datagen.flow_from_dataframe(
  df_train,
  x_col = 'png_image',
  y_col = 'target',
  target_size=(150, 150),
  batch_size=4,
  color_mode = 'rgb',
  class_mode='sparse',
)

valid_generator = image_datagen.flow_from_dataframe(
  df_valid,
  x_col = 'png_image',
  y_col = 'target',
  target_size=(150, 150),
  batch_size=4,
  color_mode = 'rgb',
  class_mode='sparse',
)

数据框如下所示:

数据帧头

1个回答

你试过设置class_mode='categorical'你的发电机吗?

我相信class_mode='sparse'当您的损失函数定义为'sparse_categorical_crossentropy'while时'categorical_crossentropy'有效class_mode='categorical'