Как получить оценку от 0 до 1 для каждого класса CNN?

В настоящее время я обучаю сеть (CNN, реализованную с помощью Tensorflow) для классификации более 3 классов, дело в том, что я получаю оценку, например:

[ -20145.36, 150069, 578456.3 ].

Я хотел бы иметь оценку от 0 до 1 (какая-то вероятность).

Сначала я думал об использовании сигмовидной функции, но потом нашел это обсуждение, где она даже не упоминается:

https://www.quora.com/How-do-you-normalize-numeric-scores-to-a-0-1-range-for-comparing-other-machine-learning-techniques< /а>

Что вы посоветуете мне сделать, чтобы получить от 0 до 1 баллов за каждый класс?

Спасибо


person A. Piro    schedule 21.04.2017    source источник
comment
tf.nn.softmax() преобразует выходные данные сети в допустимое распределение вероятностей, т. е. все вероятности находятся в диапазоне от 0 до 1 и в сумме дают 1. Документацию по TensorFlow см. здесь: tensorflow.org/api_docs/python/tf/nn/softmax и здесь для объяснения: tensorflow.org/get_started/mnist/beginners   -  person ml4294    schedule 21.04.2017


Ответы (1)


В качестве последнего слоя вы всегда используете softmax для получения оценок классификации n-класса. Итак, у вас есть несколько вариантов, как указано в документах по классификации tensorflow.

Самый простой — использовать tf.nn.softmax().

softmax = exp(logits) / reduce_sum(exp(logits), dim)

Пример:

In [63]: ar = np.array([ -20145.36, 150069, 578456.3 ])

In [64]: scores = tf.nn.softmax(ar)

In [65]: sess = tf.InteractiveSession()

In [66]: scores.eval()
Out[66]: array([ 0.,  0.,  1.])
person kmario23    schedule 21.04.2017