2016-06-12 4 views

ответ

-1

В головной версии (на сегодняшний день) вы можете найти эту функцию в строке https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py # 424.

Комментарий говорит:

Измеряется вероятность ошибки в дискретных задачах классификации в которых классы являются взаимоисключающими (каждая запись точно один класс). Например, каждое изображение CIFAR-10 помечено одним и только одной меткой: изображение может быть собакой или грузовиком, но не обоими.

0

Наиболее важной частью реализации является here начиная с линии 132.

Этот функтор вызывается kernel implementation.

Он использует не очень хорошо документированную функцию Eigen, называемых генераторами, которые позволяют писать довольно гибкий код и скомпилировать его как для CPU, так и для nvcc для графического процессора.

0

sparse_softmax_cross_entropy_with_logits эквивалентно численно стабильной версии следующим образом:

-1. * tf.gather(tf.log(tf.nn.softmax(logits)), target)

, или, в более "читаемым" Numpy-кода:

-1. * np.log(softmax(logits))[target]

где softmax(x) = np.exp(x)/np.sum(np.exp(x)).

То есть, он вычисляет softmax предоставленных логитов, берет его журнал для извлечения лог-вероятностей и разрезает логарифмические вероятности для получения лог-вероятности цели.

Однако он делает это численно устойчивым способом (здесь может быть несколько ошибок) путем добавления небольших значений к некоторым из операций. Это означает, что вычисление вышеописанной версии приведет лишь приблизительно к тем же значениям, что и nn.sparse_softmax_cross_entropy_with_logits (выполнение некоторых тестов показало, что разница последовательно меньше 2e-6).

Смежные вопросы