Я использую Keras для решения задачи сегментации.
Основополагающими картами являются двоичные изображения, отмечая, что черный представляет фон, а белый представляет объекты.
Поэтому я использую генератор данных в Keras следующим образом, перед тем как установить значение 0в пиксели фона и значение 1 для объектов:
train_label_datagen = ImageDataGenerator(
horizontal_flip= True,
)
train_label_generaror = train_label_datagen.flow_from_directory(
directory=os.path.join(FLAGS.dataset_dir, FLAGS.cropped_dir, "training",
FLAGS.labels_folder_name),
target_size=(FLAGS.resize_size, FLAGS.resize_size),
class_mode= None,
color_mode= 'grayscale',
batch_size= FLAGS.batch_size,
seed = FLAGS.seed,
shuffle= False
)
И подробности функции model.compile:
sgd = SGD(lr= FLAGS.lr, decay=FLAGS.decay, momentum=FLAGS.momentum,
nesterov=True)
model.compile(optimizer= sgd,
loss = losses.sparse_categorical_crossentropy,
metrics=['acc', miou])
model.output является картой вероятности.
MyВопрос в том, что: Когда я тренирую модель, возникает ошибка
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [602112] vs. [12,224,224]
[[Node: metrics/acc/Equal = Equal[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"](metrics/acc/Reshape, metrics/acc/Cast)]]
[[Node: metrics/miou/confusion_matrix/assert_non_negative_1/assert_less_equal/Assert/AssertGuard/Assert/Switch_1/_167 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_544_m...t/Switch_1", tensor_type=DT_INT64, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
. Я пытаюсь изменить потери на 'binary_crossentropy' и output.activation на 'sigmoid', тогда это работает.
Так что я хочузнать, что делает эту ошибку.