#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 здесь .