Повышение точности отрицательного класса в выводе нейронной сети

#python #tensorflow #neural-network #precision #precision-recall

#python #тензорный поток #нейронная сеть #точность #точность-отзыв

Вопрос:

Я обучил CNN для прогнозирования звукового сигнала (отрицательный, нейтральный, положительный), и у меня есть 4 разные модели CNN с несколько иной архитектурой и наборами данных. Эти модели отлично работают в большинстве тестовых случаев и обеспечивают ожидаемый результат. код:

 # 0 is for Negative
# 1 is for Neutral
# 2 is for Positive

print(model.predict(x),model.predict_classes(x))
 

Результат, который я получаю от всех 4 моделей, приведен ниже.

 [[1.0000000e 00 2.4311501e-12 1.3999395e-16]] [0]
[[4.4723673e-04 5.5520708e-08 9.9955267e-01]] [2]
[[5.34977562e-06 1.20891924e-29 9.99994636e-01]] [2]
[[9.9999642e-01 2.8299738e-24 3.6233271e-06]] [0]
 

Что я хочу сделать, так это придать больший вес нейрону с положительными и нейтральными прогнозами классов, чтобы моя модель была более склонна к прогнозированию положительного и нейтрального вывода, чем отрицательного вывода. Я хочу знать, как правильно манипулировать вероятностями, чтобы модель выводила отрицательный результат только тогда, когда она на 100% уверена, что она отрицательная. Итак, я хочу, чтобы моя модель была более точной при прогнозировании отрицательного класса по сравнению с другими классами, при этом вероятности всех 4 моделей в равной степени учитывались в окончательном прогнозе.

Ответ №1:

Измените свою функцию потерь на tf.nn.weighted_cross_entropy_with_logits()

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

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