我目前正在使用带有Python的keras构建二进制图像分类器 . 数据均匀分配,用于训练和测试 .

我一直有问题,准确率为50%,这意味着它在训练期间猜测一个 class .

我介绍了渐变剪辑,带动量的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'])

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

有谁知道为什么会这样,或者接下来应该尝试什么?