Недавно я наткнулся на tf.nn.sparse_softmax_cross_entropy_with_logits, и я не могу понять, в чем разница по сравнению с tf.nn.softmax_cross_entropy_with_logits .
Является единственным отличие , что обучающие векторы y
должны быть один горячей закодированными при использовании sparse_softmax_cross_entropy_with_logits
?
Читая API, я не нашел другой разницы по сравнению с softmax_cross_entropy_with_logits
. Но зачем тогда нужна дополнительная функция?
Не должен softmax_cross_entropy_with_logits
давать такие же результаты, как sparse_softmax_cross_entropy_with_logits
если бы он был снабжен однократно закодированными обучающими данными / векторами?
neural-network
tensorflow
softmax
cross-entropy
daniel451
источник
источник
Ответы:
Наличие двух разных функций - это удобство , поскольку они дают одинаковый результат.
Отличие простое:
sparse_softmax_cross_entropy_with_logits
метки должны иметь форму [batch_size] и dtype int32 или int64. Каждая метка представляет собой int в диапазоне[0, num_classes-1]
.softmax_cross_entropy_with_logits
метки должны иметь форму [batch_size, num_classes] и dtype float32 или float64.Этикетки, используемые в,
softmax_cross_entropy_with_logits
являются одной из самых популярных версий этикеток, используемых вsparse_softmax_cross_entropy_with_logits
.Еще одно крошечное отличие заключается в том
sparse_softmax_cross_entropy_with_logits
, что с помощью вы можете указать -1 в качестве метки, чтобы0
на этой метке были потери .источник
Я просто хотел бы добавить к принятому ответу 2 вещи, которые вы также можете найти в документации TF.
Первый:
Второй:
источник
Обе функции вычисляют одни и те же результаты, а sparse_softmax_cross_entropy_with_logits вычисляет перекрестную энтропию непосредственно на разреженных метках вместо их преобразования с помощью однократного кодирования .
В этом можно убедиться, запустив следующую программу:
Здесь я создаю случайный
logits
вектор длиныdims
и генерирую метки с горячим кодированием (где элемент inpos
равен 1, а другие - 0).После этого я вычисляю softmax и sparse softmax и сравниваю их результат. Попробуйте запустить его несколько раз, чтобы убедиться, что он всегда дает одинаковый результат.
источник