问题描述
我正在尝试使用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