Классификация по нескольким меткам звучит похоже на классификацию по нескольким меткам, но совершенно отличается от нее. Это один из немногих терминов, о которых, когда вы читаете, вы полностью понимаете идею, но когда вы пытаетесь реализовать, ваш мозг работает как много… что? Что это было? Что ж, я могу заверить вас, что чувство замешательства вполне нормально, поскольку в машинном обучении есть много причудливых терминов, и цель этого блога — прояснить один из них.

Классификация

Процесс выделения объекта из набора объектов. Например, когда ребенок перестает плакать, когда его/ее мать берет на руки, его мозг идентифицировал его мать среди множества других людей. Вот и все. Это классификация. Зачем ML все раскручивать? В нашей повседневной жизни мы классифицируем тысячи объектов. Мы классифицируем спелые бананы от незрелых. Мы отделяем спортивный автомобиль от среднего седана. Это вещи, которые приходят к нам естественным образом. Наш мозг развивался на протяжении многих лет, чтобы быть чрезвычайно опытным в этом. Это самое примитивное поведение любого живого существа, включая нас. Нам нужно классифицировать вещи в нашем окружении, чтобы выжить. Я надеюсь, что обратился к слону в комнате, и теперь, когда вы видите слово классификацияв любом исследовательском документе, сообщении и т. д., вы не будете сходить с ума.

Теперь вы скажете, я понимаю, что это не имеет большого значения для людей, но как насчет машин? На это я отвечу, что это не так уж сильно отличается или запутанно. В машинах по тому же принципу. Вы учите машину с нуля, что этот объект — банан, а другой объект — яблоко, точно так же, как вас учат в детстве. Ваш мозг чрезвычайно силен, чтобы учиться на демонстрации без использования какого-либо языка программирования или фреймворка :D, а потом некоторые люди говорят, что машины захватят мир. Это не произойдет в ближайшее время. Мы слишком умны, чтобы нас заменили. Возвращаясь к теме, чтобы научить так называемые «машины»классифицировать объекты, нам нужно предоставить им данные.

Возьмем следующий пример:

Мы видим, что первые два файла имеют по одной метке, а имя третьего файла имеет две метки. Это вообще возможно? Да, и следующее изображение показывает, почему?

На этом изображении хорошо видно, что метки правильные. Там действительно есть человек и лошадь. Ты скажешь, что все в порядке, Гаутам, но как ты собираешься его тренировать?

Тренироваться на самом деле очень просто! Во-первых, вам нужно разобраться с этикетками. На мгновение забудьте, что у нас есть несколько меток. Предположим, у нас есть три изображения.

  1. один из котов
  2. Один из винтиков
  3. Один из человека

Теперь предположим, что я подготовил модель машинного обучения. Он берет изображение и выдает три вероятности [p1, p2, p3]

p1 : вероятность того, что на изображении кошка

p2: вероятность того, что это изображение собаки

p3: вероятность того, что изображение человека

Теперь самое интересное. Как вы собираетесь сравнивать эти значения с вашими метками, чтобы выполнить обратное распространение? Имейте в виду, что ваши метки — это такие строки, как «Собака», «Кошка» и т. д. Как вы собираетесь выполнять обратное распространение?

Ответ заключается в том, что вам нужно преобразовать эти метки во что-то, понятное машине.

Введите одну горячую кодировку

Одно горячее кодирование — это процесс, с помощью которого вы преобразуете эти метки во что-то, что машина понимает, то есть в числа. Преобразование будет следующим:

  1. Узнайте, сколько у вас уникальных объектов/классов. У нас есть 3 в этой задаче. Пусть он называется SIZE.
  2. Создайте массив/вектор размером SIZE и присвойте всем элементам значение 0.
  3. Для каждого индекса в массиве решите, какому классу вы хотите его выделить. Например, предположим, что я даю кошкам индекс 1, собаке индекс 2 и человеческому индексу 3 (после одного основанного индекса).
  4. Для каждого изображения замените 0 на 1 в индексе, который представляет класс. Например, на следующем изображении

Я выделил индекс 3, чтобы быть человеком. Итак, теперь я заменю [0 0 0] на [0 0 1].

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

Теперь давайте вернемся к нашему примеру с лошадью и человеком. Как бы мы представили такой образ?

Это действительно так. Это многоуровневая классификация. Таким образом вы кодируете несколько меток в числовой форме.

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

PyTorch и fastai имеют два основных класса для представления и доступа к обучающему набору или набору проверки:

  1. Набор данных: коллекция, которая возвращает кортеж вашей независимой и зависимой переменной для одного элемента.

2. DataLoader: итератор, который обеспечивает поток мини-пакетов, где каждый мини-пакет представляет собой кортеж из пакета независимых переменных и пакета зависимых переменных.

Получаем следующие результаты:

95% точность! Совсем неплохо. Полный блокнот можно найти по ссылке (ссылка)

Еще одна важная вещь, на которую следует обратить внимание, — это функция binary_cross_entropy(). Я пока не буду вдаваться в подробности его работы, но он примерно измеряет отклонение нашего вывода от целевых меток.

Наша функция потерь будет сравнивать эти значения и выполнять обратное распространение.

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