Що таке 'from_logits=True' у функціях втрати Keras/TensorFlow? PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Що таке 'from_logits=True' у функціях втрати Keras/TensorFlow?

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

Поширена плутанина між новими практиками глибокого навчання, коли використовують функції втрат Keras для класифікації, наприклад 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
  • Робота з Transformers за допомогою KerasNLP (потужна бібліотека WIP)
  • Інтеграція Transformers із ConvNets для створення підписів до зображень
  • DeepDream

Висновок

У цьому короткому посібнику ми розглянули from_logits аргумент на користь класів програшу Кераса, що часто викликає запитання у нових практиків.

Можливо, плутанина виникає через скорочений синтаксис, який дозволяє додавати шари активації поверх інших шарів у межах визначення самого шару. Нарешті ми визначили, коли потрібно встановити аргумент True or False, і коли вихідні дані слід залишити як логіти або пропустити через функцію активації, таку як SoftMax.

Часова мітка:

Більше від Stackabuse