Изменить вывод сигмоида на вероятность

#python #tensorflow #machine-learning #keras

#python #тензорный поток #машинное обучение #keras

Вопрос:

Я уже обучил нейронную сеть с последним слоем, используя сигмоид. Если я не могу переобучить сеть с помощью softmax, могу ли я изменить окончательные прогнозы как вероятность? Теперь вывод pred = fin_model.predict_proba(x_train) выглядит так

 array([[0.65247375, 0.45892698],
       [0.65919983, 0.4590024 ],
       [0.15964866, 0.47771254],
       [0.53297156, 0.47564888],
       [0.16078213, 0.4779702 ]], dtype=float32)
 

Сумма каждого подобного 0.6524 0.4589 не равна 1 и, следовательно, не может быть вероятностью. Есть ли способ изменить его на вероятности?

Комментарии:

1. Вы выполняете классификацию 2 классов для 5 строк данных? Именно поэтому форма pred = (5,2)?

2. Если все, что вы хотите, это преобразовать вывод sigmoid в вероятности, тогда вы можете выполнить операцию softmax над выводами sigmoid. это приведет к добавлению выходных данных к 1

3. Вероятность чего?

4. Почему вы не можете переобучить сеть? Если вы обучили его с неправильной активацией, выходные данные, вероятно, будут довольно плохими, даже если вы сейчас преобразуете их в вероятности (поскольку сеть не была обучена должным образом).

5. 1. Я делаю классификацию на 2 класса. Я выбрал 5 строк данных, их более 5 строк. 2. И под вероятностью я подразумеваю, что для каждой строки данных сумма равна 1, поэтому ее можно интерпретировать как вероятность того, что эти данные x принадлежат классу 0 или 1. 3. Причина, по которой я не могу переобучить сеть, заключается в том, что это очень трудоемко, выходные данныенеплохо, сейчас я просто хочу рассчитать AUC на основе выходных данных. 4. Я попытаюсь выполнить операцию softmax. Спасибо, ребята!

Ответ №1:

Sigmoid Функция всегда возвращает значение от 0 до 1 и в основном используется в binary classification . Sigmoid функция активации пометит один класс как close to 0 (<=0.5) и другие close to 1 (>0.5) .

Чтобы использовать сигмоид, вам необходимо определить конечный слой как:

 model.add(Dense(1, activation_function='sigmoid')) 
 

Однако вы также можете использовать Softmax активацию для binary classification . Softmax преобразует вектор значений в распределение вероятностей, которое дает выходной вектор в диапазоне (0, 1) и сумму в 1.

Он может быть объявлен в конечном слое как :

 model.add(Dense(2, activation_function='softmax')) 
 

Вы можете получить более подробную информацию о softmax и sigmoid здесь .