Я получаю эту ошибку «Ошибка значения: Фигуры (None, 256, 256, 2) и (None, 256, 256, 1)несовместимы при попытке обучить модель для сегментации

#python #tensorflow #deep-learning #image-segmentation

Вопрос:

Я работаю над проблемой сегментации изображений(тензорный поток). Обучающие изображения в наборе данных равны 50, а тестовые-51, при обучении моей модели я получаю следующую ошибку

 ValueError: Shapes (None, 256, 256, 2) and (None, 256, 256, 1) are incompatible
 

Код обучения таков:

 model = build_model(input_shape)
model.compile(
        loss="binary_crossentropy",
        optimizer=tf.keras.optimizers.Adam(lr),
        metrics=[
            tf.keras.metrics.MeanIoU(num_classes=2),
            tf.keras.metrics.Recall(),
            tf.keras.metrics.Precision()
        ]
    )
 

Модель:

 def build_model(shape):
    inputs = Input(shape)
    x, skip_1 = encoder1(inputs)
    x = ASPP(x, 64)
    x = decoder1(x, skip_1)
    outputs1 = output_block(x)

    x = inputs * outputs1

    x, skip_2 = encoder2(x)
    x = ASPP(x, 64)
    x = decoder2(x, skip_1, skip_2)
    outputs2 = output_block(x)
    outputs = Concatenate()([outputs1, outputs2])

    model = Model(inputs, outputs)
    return model

if __name__ == "__main__":
    model = build_model((256, 256, 3))
    model.summary()
 

Ошибка трассировки:
Ошибка значения: в коде пользователя:

 /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:855 train_function  *
    return step_function(self, iterator)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:845 step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:1285 run
    return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:2833 call_for_each_replica
    return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:3608 _call_for_each_replica
    return fn(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:838 run_step  **
    outputs = model.train_step(data)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:800 train_step
    self.compiled_metrics.update_state(y, y_pred, sample_weight)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/compile_utils.py:460 update_state
    metric_obj.update_state(y_t, y_p, sample_weight=mask)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/utils/metrics_utils.py:86 decorated
    update_op = update_state_fn(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/metrics.py:177 update_state_fn
    return ag_update_state(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/metrics.py:1462 update_state  **
    sample_weight=sample_weight)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/utils/metrics_utils.py:366 update_confusion_matrix_variables
    y_pred.shape.assert_is_compatible_with(y_true.shape)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/tensor_shape.py:1161 assert_is_compatible_with
    raise ValueError("Shapes %s and %s are incompatible" % (self, other))

ValueError: Shapes (None, 256, 256, 2) and (None, 256, 256, 1) are incompatible
 

Я не знаю, к чему относится эта ошибка и в какой момент.

Комментарии:

1. Можете ли вы также предоставить структуру модели?

2. Да, функция build_model.

3. Кроме того, можете ли вы указать, где произошла ошибка? Иногда tf показывает, какой слой получил несовместимые формы. Поскольку это высоко настроенный поток моделей, его трудно отладить невооруженным глазом.

4. Я также сталкиваюсь с этой проблемой,она не показывает слой. Это просто говорит об ошибке, которую я привел в цитате в приведенном выше вопросе

5. Какова ваша форма ввода?