目标数组的形状与传递的数组的形状不匹配CNN tensorflow具有loss = mean_squared_error`

问题描述

我正在尝试使用CNN检测段落分割的边界框。那是我的模特,

model = models.Sequential()

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


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


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



model.add(layers.Conv2D(16,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是shape为(93,1,4)。我关注的是一篇博客文章,其中他们使用 MeanSquaredError 作为损失函数。每次运行此代码时,都会出现此错误

错误

ValueError: A target array with shape (93,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.

我已经在寻找解决方案。但没有找到我的问题到底在哪里。

解决方法

删除激活=“ Sigmoid”。

MSE是一种回归度量,而S形是一种分类度量。

-MULTI LABEL CLASSIFICATION
activation: sigmoid 
loss: binary_crossentrophy

-MULTI CLASS CLASSIFICATION
activation: softmax
loss: categorical_crossentrophy

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