Форма целевого массива не совпадает с формой переданного массива (CNN tensorflow с потерей= mean_squared_error`)

#keras #deep-learning #conv-neural-network #loss

#keras #глубокое обучение #conv-нейронная сеть #потеря

Вопрос:

Я пытаюсь обнаружить ограничительную рамку для сегментации абзаца с помощью CNN. Это моя модель ,

 model = models.Sequential()

model.add(layers.Conv2D(16, (3, 3), activation='relu', input_shape=(1120, 800, 1)))


model.add(layers.Conv2D(16, (3, 3), activation='relu'))


model.add(layers.Conv2D(16, (3, 3), activation='relu'))


model.add(layers.Conv2D(16, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))



model.add(layers.Conv2D(16, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))


model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(4, activation='sigmoid'))

#fit

model.compile(optimizer='adam',
              loss=tf.keras.losses.MeanSquaredError(),
              metrics=['accuracy'])

history = model.fit(X_train, y_Train ,batch_size=10, epochs=5, 
                    validation_data=(X_test, y_test))

  

Форма формы x_train равна (93, 1120, 800, 1) ; y_train — это форма (93,1,4) . Я слежу за сообщением в блоге, где они использовали MeanSquaredError в качестве функции потерь. Каждый раз, когда я запускаю этот код, я получаю эту ошибку.

Ошибка

 ValueError: A target array with shape (93, 1, 4) was passed for an output of shape (None, 4) while using as loss `mean_squared_error`. This loss expects targets to have the same shape as the output.
  

Я уже ищу решение. но не нашел, в чем именно моя проблема.

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

1. Используйте tf.keras.losses. Означает quarederror вместо tf.keras.losses. Означает quarederror()

2. Не работает . показывает » Ошибка значения: получен неустановленный класс потерь: MeanSquaredError’> Пожалуйста, вызовите классы loss «»перед передачей их в Model.compile «.

3. Проблема решена …..

Ответ №1:

Удалите активацию =’сигмоид’.

MSE — это мера регрессии, а сигмоид — мера классификации.

 -MULTI LABEL CLASSIFICATION
activation: sigmoid 
loss: binary_crossentrophy

-MULTI CLASS CLASSIFICATION
activation: softmax
loss: categorical_crossentrophy

REGRESSION (-inf,  inf)
Activation: None
loss: mse