如何在Keras图像中使用二进制分类进行异常检测?

时间:2019-07-12 18:37:40

标签: python keras classification

我是ML的新手,并且设法使多类分类运行得非常准确。现在,我正在尝试对图像进行分类,但与我的训练图像匹配或不匹配。我在项目中使用Resnet50和InceptionV3模型。现在,我确实有一组图像(匹配),并且我需要测试测试图像是否匹配。有时也称为异常检测。我使用Keras分类方法,但是在使用两类(好与坏-1致密层)之前使用二进制交叉熵,并使用Sigmoid作为二进制输出。它工作正常,但是在新的过程中,我没有第二等(没有劣质图像),而且我只有很好。 (仍然1个密集层) 我有三个培训,验证和测试文件夹。每个文件夹都有一个包含图像的文件夹(一个类)。

这就是我的做法。 1.我将最后一个密集层设置为1。

predictions = Dense(1, activation='sigmoid',name='output_layer')(x_model)

图像生成器(只有一个包含图像的文件夹)

train_datagen = ImageDataGenerator(rescale = 1./255,
                                    shear_range = 0.3,
                                    zoom_range = 0.3,
                                    rotation_range = 0.3,
                                    vertical_flip = True,
                                    horizontal_flip = True)

    validate_datagen = ImageDataGenerator(rescale = 1./255)

    train_generator = train_datagen.flow_from_directory(train_dir,
                                        target_size = (size, size),
                                        batch_size = batch_size,
                                        class_mode = 'binary')


validate_generator = validate_datagen.flow_from_directory(test_dir,
                                    target_size = (size, size),
                                    batch_size = batch_size,
                                    class_mode = 'binary')

然后进行培训:

model.fit_generator(train_generator,
                         epochs = epochs,
                         validation_data = validate_generator,
                         class_weight = class_weight, 
                         steps_per_epoch=int(train_generator.samples/batch_size),
                         callbacks=callbacks_list, 
                         validation_steps = int(validate_generator.samples/batch_size),
                           )  

我没有第二个文件夹,因此验证准确性达到100%。但是测试精度为零。 (当我执行两类二进制分类模型时,情况并非如此)。

对于单个类,我认为神经网络将在单个图像集上得到训练,并将其他所有结果都设为0。显然,这种方式不起作用。现在,我将使用相同的好图像以及所有其他垃圾图像进行另一个培训。

任何建议我该怎么做?我想尽可能多地使用Keras库,因为与此同时我也在学习Python。

0 个答案:

没有答案