使用 CNN 进行二进制图像分类,但一个类的 Precision-Recall-F1 分数为 0

Binary Image classification with CNN, but Precision-Recall-F1 Score is 0 for one class

提问人:Harun Harman 提问时间:8/23/2023 最后编辑:Harun Harman 更新时间:8/24/2023 访问量:48

问:

我正在尝试对给定图像是否为木桩进行分类。所以我的课程是木头和none_wood。None_wood类包含不同的照片,包括文件、数字、人物等。我的训练集由 4655 个木头和 4566 个none_wood图像组成(我使用 augmentor 来增加none_wood类的大小),测试集包括每个类的 1139 张图像。

我的模型如下:

classifier = Sequential()
classifier.add(Convolution2D(32,(3,3),input_shape = (175,130,3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2,2)))
classifier.add(Convolution2D(64,(3,3),input_shape = (175,130,3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2,2)))
classifier.add(Flatten())
classifier.add(Dense(128, activation = 'relu'))
classifier.add(Dense(1, activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

当我得到班级报告和混淆矩阵时,它们如下:Class_report and confusion matrix

以及训练验证损失和训练验证准确率(提前停止)的图:Plots

我尝试了最多 10 个不同的 epoch,我添加了回调以防止过度拟合,我用 ImageDataGenerator 进行了数据增强,数据集中没有不平衡,我尝试了不同的优化器,我尝试了不同的损失函数,但没有变化。

你有什么建议?我不明白确切的问题是什么,为什么混淆矩阵中的 FP 和 TN 值为 0?我需要什么来提高准确性?它是 0.5 :(

更新:我的测试集目录有两个子目录,称为 wood none_wood。我把它变成了一个testSet目录,并将所有测试图像放在其中。这一次,精度-召回-f1 分数-准确率,一切都是 1.00。伙计们,我错过了什么?????

conv-神经-网络 混淆-矩阵 图像-分类 -精确-召回

评论

0赞 YScharf 8/24/2023
此行出现两次。修复后请重新运行。classifier.add(Convolution2D(64,(3,3),input_shape = (175,130,3), activation = 'relu'))
0赞 Harun Harman 8/24/2023
你的意思是应该只有以下行吗?“classifier.add(Convolution2D(32,(3,3),input_shape = (175,130,3), activation = 'relu'))”.我很难使用 2 个卷积层,这就是我添加过滤器 =64 的原因。
0赞 YScharf 8/24/2023
将第二个替换为 .classifier.add(Convolution2D(64,(3,3),input_shape = (175,130,3), activation = 'relu'))classifier.add(Convolution2D(64,(3,3), activation = 'relu'))
0赞 Harun Harman 8/24/2023
谢谢,但它并没有解决问题。:(
0赞 YScharf 8/25/2023
尝试再添加两个卷积层和另一个密集层。

答: 暂无答案