为CNN构建二进制分类器的正确方法

时间:2019-01-04 14:09:45

标签: machine-learning conv-neural-network pytorch

我使用预训练模型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))

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

1 个答案:

答案 0 :(得分:1)

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

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