Реализация Softmax на C++

Близкие,

Есть ли пример реализации простой функции softmax для значений N? Мне кажутся такие вещи, как «детекторы на основе softmax» и т. д., но я просто хочу увидеть чистую, простую реализацию softmax на C++.

Какие примеры вы знаете?

Спасибо,


person Pototo    schedule 19.10.2018    source источник
comment
Вы могли бы хотя бы рассказать нам, что, по вашему мнению, является функцией softmax.   -  person Jesper Juhl    schedule 19.10.2018
comment
или Google... codereview.stackexchange.com/questions/177973/ stackoverflow.com/questions/9906136/   -  person OznOg    schedule 19.10.2018
comment
@OznOg - Вопрос должен быть автономным. Google не должен быть обязательным.   -  person Jesper Juhl    schedule 19.10.2018
comment
Конечно, это может быть реализовано несколькими способами. Реализация будет сильно зависеть от того, как вы представляете свои данные, которые могут быть vector<T>, array<T,N>, некоторым массивом указателей или даже какой-то специфичной для библиотеки вещью, такой как TensorFlow. Если вы покажете, как представляете свою проблему, что вы уже пробовали и где точно застряли, вам поможет получить хороший ответ.   -  person alter igel    schedule 19.10.2018
comment
@JesperJuhl Это был комментарий не для вас, а для спрашивающего, у которого уже есть ответы на его вопрос в SO.   -  person OznOg    schedule 19.10.2018


Ответы (1)


Я не видел библиотечной реализации softmax, хотя это не доказательство того, что ее не существует. Это достаточно просто, чтобы люди просто писали свои собственные, когда им это нужно.

Для справки, функция softmax для u1, u2, u3... это всего лишь кортеж (exp(u1)/Z, exp(u2)/Z, exp(u3)/Z, ...), где нормализующая константа Z представляет собой просто сумму экспонент Z = exp(u1) + exp(u2) + exp(u3) + ....

Обратите внимание, что добавление или вычитание константы из каждого u оставляет результат неизменным, поскольку это эквивалентно умножению выше и ниже на один и тот же коэффициент. Таким образом, вы можете сделать вычисления более правильными в численном отношении, вычитая наибольшее значение из u; тогда наибольший член exp(u) будет равен 1, а все остальные - чем-то меньшим.

person Robert Dodier    schedule 21.10.2018