Правильный способ построения двоичного классификатора для CNN - PullRequest
0 голосов
/ 04 января 2019

Я создал нейронную сеть на pytorch, используя модель предварительной подготовки VGG16, и добавил свой дополнительный слой, чтобы определить принадлежность к одному из двух классов. Например, пчела или муравей.

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 голосов
/ 04 января 2019

Неудивительно, что классификатор 2-х классов не работает с изображением, не принадлежащим ни к какому классу.

Чтобы обучить свой новый одноклассный классификатор, да, используйте в нашем тестовом наборе изображения пчел и набор изображений не пчел. Вы должны учесть дисбаланс между классами, чтобы избежать перегрузки только изображениями пчел, которые у вас есть. Точность теста покажет такой уклон.

...