Sparse_categorical_crossentropy vs категорическая_кросентропия (керас, точность)
20
Что лучше для точности или они одинаковые? Конечно, если вы используете categoryorical_crossentropy, вы используете одну горячую кодировку, а если вы используете sparse_categorical_crossentropy, вы кодируете как обычные целые числа. Кроме того, когда один лучше другого?
Используйте разреженную категориальную кроссцентропию, когда ваши классы являются взаимоисключающими (например, когда каждая выборка принадлежит точно одному классу), и категориальную кроссцентропию, когда одна выборка может иметь несколько классов, или метки имеют мягкие вероятности (например, [0,5, 0,3, 0,2]).
Формула для категориальной кроссентропии (S - выборки, C - классификация, - выборка относится к классу c):s ∈ c
- 1NΣs ∈ SΣc ∈ C1s ∈ cл о гp ( s ∈ c )
В случае, когда классы являются исключительными, вам не нужно суммировать их - для каждого образца только ненулевое значение просто для истинного класса c.- л о гp ( s ∈ c )
Это позволяет экономить время и память. Рассмотрим случай 10000 классов, когда они являются взаимоисключающими - только 1 log вместо суммирования 10000 для каждого образца, только одно целое число вместо 10000 float.
Формула одинакова в обоих случаях, поэтому никакого влияния на точность не должно быть.
Они влияют на точность по-разному, например, на набор данных mnist digits?
Мастер М
1
Математически нет никакой разницы. Если существует значительная разница в значениях, вычисленных реализациями (скажем, tenorflow или pytorch), то это звучит как ошибка. Простое сравнение по случайным данным (1000 классов, 10 000 выборок) не показывает никакой разницы.
frenzykryger
∈
Ты прав. Благодарность!
frenzykryger
@frenzykryger Я работаю над проблемой множественного вывода. У меня есть 3 отдельных выхода, o1,o2,o3и у каждого есть 167,11,7классы соответственно. Я прочитал ваш ответ, что это не будет иметь никакого значения, но есть ли разница, буду ли я использовать sparse__или нет. Могу ли я перейти к categoricalпоследним 2 и sparseк первому, поскольку в первом классе 167 классов?
Дешвал
5
Ответ, в двух словах
Если ваши цели имеют горячее кодирование, используйте categoryorical_crossentropy. Примеры однократного кодирования:
[1,0,0][0,1,0][0,0,1]
Но если ваши цели - целые числа, используйте sparse_categorical_crossentropy. Примеры целочисленных кодировок (для завершения):
o1,o2,o3
и у каждого есть167,11,7
классы соответственно. Я прочитал ваш ответ, что это не будет иметь никакого значения, но есть ли разница, буду ли я использоватьsparse__
или нет. Могу ли я перейти кcategorical
последним 2 иsparse
к первому, поскольку в первом классе 167 классов?Ответ, в двух словах
Если ваши цели имеют горячее кодирование, используйте categoryorical_crossentropy. Примеры однократного кодирования:
Но если ваши цели - целые числа, используйте sparse_categorical_crossentropy. Примеры целочисленных кодировок (для завершения):
источник
sparse_categorical_crossentropy
? А что значитfrom_logits
аргумент?