首页 > 解决方案 > 为 CNN 构建二元分类器的正确方法

问题描述

我使用预训练模型 VGG16 在 pytorch 上创建了一个神经网络,并添加了我自己的额外层来定义属于两个类之一。例如蜜蜂或蚂蚁。

model = models.vgg16(pretrained=True)
# Freeze early layers
for param in model.parameters():
    param.requires_grad = False
n_inputs = model.classifier[6].in_features
# Add on classifier
model.classifier[6] = nn.Sequential(
    nn.Linear(n_inputs, 256), nn.ReLU(), nn.Dropout(0.2),
    nn.Linear(256, 2), nn.LogSoftmax(dim=1))

该模型适用于两个类,但是如果将鳄鱼图像上传到其中,很可能会将其视为蜜蜂)现在我想基于此模型制作一个二进制分类器,例如定义蜜蜂或不是蜜蜂蜜蜂(绝对是任何没有蜜蜂的图像)我刚刚开始了解神经网络,我需要有关正确方法是否会在两组图像中进行训练的建议,其中一组图像只有蜜蜂,而其他数千张随机图像。还是应该以其他方式完成?

标签: machine-learningconv-neural-networkpytorch

解决方案


2 类分类器因图像不属于任何类而失败,这确实不足为奇。

是的,要训练新的一类分类器,请在我们的测试集中使用蜜蜂图像和一组非蜜蜂图像。您还需要适应类之间的不平衡,以避免过度拟合您拥有的蜜蜂图像。测试准确性会显示出这样的偏差。


推荐阅读