Что такое from_logits=True в функциях потерь Keras/TensorFlow? PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Что такое «from_logits = True» в функциях потерь Keras/TensorFlow?

Фреймворки глубокого обучения, такие как Keras, снижают входной барьер для масс и демократизируют разработку моделей DL для неопытных людей, которые могут полагаться на разумные значения по умолчанию и упрощенные API, чтобы нести бремя тяжелой работы и получать достойные результаты.

Распространенная путаница возникает между новыми практиками глубокого обучения при использовании функций потерь Кераса для классификации, таких как CategoricalCrossentropy и SparseCategoricalCrossentropy:

loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)

loss = keras.losses.SparseCategoricalCrossentropy(from_logits=False)

Что это from_logits флаг относится?

Ответ довольно прост, но требует просмотра выходных данных сети, которую мы пытаемся оценить с помощью функции потерь.

Логиты и вероятности SoftMax

Короче:

Вероятности нормализованы, т.е. имеют диапазон между [0..1]. Логиты не нормализованы и могут иметь диапазон между [-inf...+inf].

В зависимости от выходного слоя вашей сети:

output = keras.layers.Dense(n, activation='softmax')(x)

output = keras.layers.Dense(n)(x)

Выход из Dense слой будет или возвращаться:

  • вероятности: выходные данные передаются через функцию SoftMax, которая нормализует выходные данные в набор вероятностей по n, что все вместе 1.
  • логиты: n активации.

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

output = keras.layers.Dense(n, activation='softmax')(x)

dense = keras.layers.Dense(n)(x)
output = keras.layers.Activation('softmax')(dense)

Ваша функция потерь должна быть проинформирована о том, следует ли ей ожидать нормализованное распределение (выходные данные, проходящие через функцию SoftMax) или логиты. Следовательно from_logits флаг!

Когда следует from_logits = Истина?

Если ваша сеть нормализует выходные вероятности, ваша функция потерь должна установить from_logits в False, так как он не принимает логиты. Это также значение по умолчанию для всех классов потерь, которые принимают флаг, так как большинство людей добавляют activation='softmax' к своим выходным слоям:

model = keras.Sequential([
    keras.layers.Input(shape=(10, 1)),
    
    keras.layers.Dense(10, activation='softmax') 
])

input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)

Это приводит к:

tf.Tensor(
[[[0.12467965 0.10423233 0.10054766 0.09162105 0.09144577 0.07093797
   0.12523937 0.11292477 0.06583504 0.11253635]]], shape=(1, 1, 10), dtype=float32)

Поскольку эта сеть приводит к нормализованному распределению - при сравнении выходных данных с целевыми выходными данными и их оценке с помощью функции потерь классификации (для соответствующей задачи) - ты должен установить from_logits в Falseили оставить значение по умолчанию.

С другой стороны, если ваша сеть не применяет SoftMax к выходным данным:

model = keras.Sequential([
    keras.layers.Input(shape=(10, 1)),
    
    keras.layers.Dense(10)
])

input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)

Это приводит к:

tf.Tensor(
[[[-0.06081138  0.04154852  0.00153442  0.0705068  -0.01139916
    0.08506121  0.1211026  -0.10112958 -0.03410497  0.08653068]]], shape=(1, 1, 10), dtype=float32)

Вам нужно установить from_logits в True чтобы функция потерь правильно обрабатывала выходные данные.

Когда использовать SoftMax на выходе?

Большинство практиков применяют SoftMax к выходным данным, чтобы получить нормализованное распределение вероятностей, поскольку во многих случаях именно для этого вы будете использовать сеть, особенно в упрощенном учебном материале. Однако в некоторых случаях вы не хотите применить функцию к выходу, чтобы обработать ее другим способом, прежде чем применять SoftMax или другую функцию.

Ярким примером являются модели НЛП, в которых в выходном тензоре может присутствовать вероятность большого словарного запаса. Применение SoftMax поверх все они и жадно получая argmax обычно не дает очень хороших результатов.

Однако, если вы наблюдаете логиты, извлеките Top-K (где K может быть любым числом, но обычно где-то между [0...10]), и только потом применяя SoftMax к топ-к возможных токенов в словаре значительно меняет распределение и обычно дает более реалистичные результаты.

Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!

Это известно как выборка Top-K, и, хотя это не идеальная стратегия, обычно она значительно превосходит жадную выборку.

Двигаясь дальше — практическое глубокое обучение компьютерному зрению

Ваша любознательная натура заставляет вас идти дальше? Рекомендуем ознакомиться с нашим "Курс": «Практическое глубокое обучение компьютерному зрению с помощью Python».

Еще один курс по компьютерному зрению?

Мы не будем заниматься классификацией цифр MNIST или моды MNIST. Они уже давно отслужили свою роль. Слишком много учебных ресурсов сосредоточено на базовых наборах данных и базовых архитектурах, прежде чем позволить продвинутым архитектурам черного ящика взять на себя бремя производительности.

Мы хотим сосредоточиться на демистификация, практичность, понимание, интуиция и реальные проекты. Хочу учиться КАК Вы можете внести разнообразие? Мы проведем вас от того, как наш мозг обрабатывает изображения, до написания классификатора глубокого обучения исследовательского уровня для рака молочной железы, до сетей глубокого обучения, которые «галлюцинируют», обучая вас принципам и теории посредством практической работы, вооружая вас ноу-хау и инструменты, чтобы стать экспертом в применении глубокого обучения для решения задач компьютерного зрения.

Что внутри?

  • Первые принципы зрения и как научить компьютеры «видеть»
  • Различные задачи и приложения компьютерного зрения
  • Ремесленные инструменты, которые облегчат вашу работу
  • Поиск, создание и использование наборов данных для компьютерного зрения
  • Теория и применение сверточных нейронных сетей
  • Обработка смещения домена, совпадения и других смещений в наборах данных
  • Передача обучения и использование времени обучения и вычислительных ресурсов других в ваших интересах
  • Создание и обучение современного классификатора рака молочной железы
  • Как применить здоровую дозу скептицизма к господствующим идеям и понять последствия широко распространенных методов
  • Визуализация «концептуального пространства» ConvNet с использованием t-SNE и PCA
  • Тематические исследования того, как компании используют методы компьютерного зрения для достижения лучших результатов
  • Правильная оценка модели, визуализация скрытого пространства и выявление внимания модели
  • Выполнение исследования предметной области, обработка ваших собственных наборов данных и создание модельных тестов
  • Передовые архитектуры, развитие идей, что делает их уникальными и как их реализовать
  • KerasCV — WIP-библиотека для создания современных пайплайнов и моделей.
  • Как разбирать и читать статьи и реализовывать их самостоятельно
  • Выбор моделей в зависимости от вашего применения
  • Создание сквозного конвейера машинного обучения
  • Ландшафт и интуиция при обнаружении объектов с помощью Faster R-CNN, RetinaNets, SSD и YOLO
  • Экземпляр и семантическая сегментация
  • Распознавание объектов в реальном времени с помощью YOLOv5
  • Обучение детекторам объектов YOLOv5
  • Работа с трансформерами с использованием KerasNLP (надежная библиотека WIP)
  • Интеграция Transformers с ConvNets для создания подписей к изображениям
  • DeepDream

Заключение

В этом кратком руководстве мы рассмотрели from_logits аргумент в пользу классов потерь Keras, которые часто вызывают вопросы у новых практиков.

Путаница, возможно, возникает из-за сокращенного синтаксиса, который позволяет добавлять уровни активации поверх других уровней в пределах определения самого уровня. Наконец-то мы рассмотрели, когда аргумент должен быть установлен в True or False, и когда выходные данные следует оставить в виде логитов или передать через функцию активации, такую ​​как SoftMax.

Отметка времени:

Больше от Стекабьюс