Как перейти на сигмовидную, чтобы узнать мульти-метки классификации - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь использовать 'inception resnet v2.py' для классификации по нескольким меткам.

Я использовал сигмоид, но результат не очень хороший.

Вы точно знаете, где изменить?

https://github.com/tensorflow/models/tree/master/research/slim

"train_image_classifier.py" был изменен на сигмовидную, но результаты так же хороши, как при использовании softmax.

Должен ли я изменить его с "inception resnet v2.py" в папке "net"?

  if 'AuxLogits' in end_points:
    slim.losses.sigmoid_cross_entropy(
        end_points['AuxLogits'], labels,
        label_smoothing=FLAGS.label_smoothing, weights=0.4,
        scope='aux_loss')
  slim.losses.sigmoid_cross_entropy(
      logits, labels, label_smoothing=FLAGS.label_smoothing, weights=1.0)
  return end_points

Если поместить изображение красного цвета и полноприводный автомобиль, было бы неплохо, если бы оно получилось таким, но это не так.

Car [0.99]
4 wheel drive [0.99]
color red [0.99]

На самом деле, все угадали, но все получается так, как будто они используют softmax.

Car [0.99]
4 wheel drive [0.03]
color red [0.009]

1 Ответ

2 голосов
/ 07 мая 2019

Есть несколько возможных вариантов в зависимости от типа вашей «мульти-метки».

Если возможная перекрывающаяся часть вашей «мульти-метки» - это комбинации разных взаимно независимых наборов меток (цвет, формаи т. д.), тогда будет хорошо создать выходные слои softmax для этих наборов по отдельности.

Если неудачно метки не могут быть разделены, то вам может потребоваться проверить и изменить функцию потерь: для softmax это обычно перекрестная энтропия, которая плохо работает для сигмоида.

...