Sparse_categorical_crossentropy vs categorical_crossentropy (кери, точність)


21

Що краще для точності чи вони однакові? Звичайно, якщо ви використовуєте categorical_crossentropy, ви використовуєте одне гаряче кодування, а якщо ви використовуєте sparse_categorical_crossentropy, ви кодуєте як звичайні цілі числа. Крім того, коли один кращий за іншого?

Відповіді:


27

Використовуйте розрізнену категоричну кросцентропію, коли ваші класи взаємовиключні (наприклад, коли кожен зразок належить саме одному класу) та категоричну кросцентропію, коли один зразок може мати кілька класів або мітки мають малу ймовірність (наприклад [0,5, 0,3, 0,2]).

Формула для категоричної кросцентропії (S - зразки, C - класифікація, - зразок належить до класу c):сc

-1NсScС1сcлогp(сc)

У випадку, коли класи є ексклюзивними, вам не потрібно підсумовувати їх - для кожного зразка лише ненульове значення - просто для істинного класу c.-логp(сc)

Це дозволяє зберегти час та пам'ять. Розглянемо випадок 10000 класів, коли вони взаємовиключні - всього 1 журнал, а не підсумовуючи 10000 для кожного зразка, лише одне ціле число замість 10000 плаває.

Формула однакова в обох випадках, тому ніякого впливу на точність не повинно бути.


1
Чи впливають вони на точність по-різному, наприклад, на набір даних про цифри чисел?
Майстер М

1
Математично різниці немає. Якщо є значна різниця у значеннях, обчислених реалізаціями (скажімо, tensorflow або pytorch), то це звучить як помилка. Просте порівняння випадкових даних (1000 класів, 10 000 зразків) не показує різниці.
frenzykryger


Ти маєш рацію. Спасибі!
frenzykryger

@frenzykryger Я працюю над проблемою з кількома виводами. У мене є 3 окремі результати, o1,o2,o3і кожен має 167,11,7класи відповідно. Я прочитав вашу відповідь, що це не має значення, але чи є різниця, використовую я sparse__чи ні. Чи можу я піти categoricalна останні 2 та sparseна перший, оскільки у першому класі 167 класів?
Дешваль

6

Відповідь у двох словах

Якщо ваші цілі закодовані гарячими, скористайтеся категоричною_кросцентропією. Приклади кодування гарячого типу:

[1,0,0]
[0,1,0] 
[0,0,1]

Але якщо ваші цілі є цілими числами, використовуйте sparse_categorical_crossentropy. Приклади цілих кодувань (для заповнення):

1
2
3

1
Чи потрібен мені один вихідний вузол sparse_categorical_crossentropy? А що означає from_logitsаргумент?
Лієво
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.