Keras二进制图像分类器即使训练集也返回1类

时间:2018-10-23 08:56:37

标签: python keras deep-learning classification

我目前正在使用keras和Python构建二进制图像分类器。 数据被均分用于培训和测试。

我一直在以50%的准确度遇到问题,这意味着它在训练中只猜一堂课。

我介绍了梯度修剪,带动量的BatchNormalization和Leaky Relu解决了一些问题。有了这些,我得到了一种分类精度高,训练准确度(95%的领域)和低损失(0.05左右)的分类器。

val_acc通常比训练精度低0.1,并且val_loss约为0.3。这表明过度拟合。

我决定只尝试使用训练图像进行预测,无论如何它们至少应正确预测那些图像。但是,即使在训练集上,它也只能预测1个课程。

下面是我的模特:

    classifier = Sequential()


    classifier.add(Conv2D(8, (5, 5), input_shape = (256, 204, 3), activation = 'linear', padding = 'same'))
    classifier.add(LeakyReLU(alpha=0.001))
    classifier.add(BatchNormalization(momentum = 0.1))
    classifier.add(MaxPooling2D(pool_size = (2, 2)))
    classifier.add(Dropout(0.5))

    classifier.add(Conv2D(8, (5, 5), activation = 'linear', padding = 'same'))
    classifier.add(LeakyReLU(alpha=0.001))
    classifier.add(BatchNormalization(momentum=0.1))
    classifier.add(MaxPooling2D(pool_size = (2, 2)))
    classifier.add(Dropout(0.5))

    classifier.add(Flatten())


   classifier.add(Dense(units = 128, activation = 'linear'))
   classifier.add(LeakyReLU(alpha=0.001))
   classifier.add(Dense(units = 1, activation = 'sigmoid'))


   adam = optimizers.Adam(lr = 0.001, decay = 1e-2, clipvalue = 1, clipnorm = 1)
  classifier.compile(optimizer = adam, loss = 'binary_crossentropy', metrics = ['accuracy'])

我已使模型尽可能简单,以防止过度拟合。 我的图像要分类的是,一块布上有水滴。看起来有点像墙上的血迹。

有人知道为什么会这样吗?还是我接下来应该尝试什么?

0 个答案:

没有答案