Вывод softmax не должен иметь нулей, верно?

Я работаю над сетью в тензорном потоке, которая создает вектор, который затем передается через softmax, который является моим выходом.

Теперь я тестировал это и, как ни странно, вектор (тот, который прошел через softmax) имеет нули во всех координатах, кроме одной.

Основываясь на определении softmax с экспонентой, я предположил, что этого не должно было произойти. Это ошибка?

РЕДАКТИРОВАТЬ: мой вектор 120x160 = 192000. Все значения являются float32


person Alperen AYDIN    schedule 23.08.2016    source источник


Ответы (1)


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

Вы правильно указали, что числитель softmax никогда не должен иметь нулевых значений из-за экспоненциального. Однако из-за точности с плавающей запятой числитель может быть очень маленьким значением, скажем, exp(-50000), которое по существу равно нулю.

person ahaque    schedule 23.08.2016
comment
Ты был немного прав. Значение не было слишком отрицательным или слишком большим, но я добавил слой lrn, который уменьшил значения и нормализовал все это. (Хотя это примерно удвоило мое время расчета, и в конечном итоге может быть хуже, когда я пытаюсь обучить сеть на графическом процессоре, поскольку у lrn нет метода для графического процессора.) - person Alperen AYDIN; 23.08.2016