为什么CNN只预测一类

时间:2019-05-07 17:29:27

标签: python-3.x keras

我有一个模型需要检测植物是否已死亡或存活。只是预测一个类,数据是不平衡的,但是我使用权重来抵消不平衡。

我查看了有关此问题的大量问题,但似乎都无法解决,显然在过度拟合时会出现此问题,因此我使用了辍学。但是模型仍然只能预测一个类别。

在此模型:

model=Sequential()

# Convolutional layer / input layer
model.add(Conv2D(60, 5,5, activation='relu', input_shape=np.shape(X[1])))
model.add(MaxPooling2D(pool_size=(3,3)))

model.add(Dropout(0.8))

model.add(Flatten())

model.add(Dropout(0.7))

model.add(Dense(130, activation='relu'))

model.add(Dropout(0.6))

# Output layer
model.add(Dense(2, activation='softmax'))


model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])

model.fit(X, y, epochs=6, batch_size=32, class_weight=class_weight, validation_data=(X_test, y_test))

通常,它应该以1:健康植物和0:来预测这两个类别。  不健康的植物

1 个答案:

答案 0 :(得分:0)

由于您的问题是二进制分类并且输出维数为2,因此应将激活更改为softmax。

model.add(Dense(2, activation='softmax'))

但是,如果要保持S形不变,只需将输出图层单位更改为1,这样您就可以输出输入是只有一个单位的两个类之一的可能性。

 model.add(Dense(1, activation='sigmoid'))