Почему Keras (tf) двоичная классификация предиката () всегда дает экстремальные вероятности, ноль или единицу? - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь реализовать модель NN (широкое и глубокое обучение) с tf.keras v2.0, чтобы выполнить некоторую двоичную классификацию.У меня есть ~ 50 тыс. Тренировочных образцов и ~ 10 тыс. Тестовых образцов.Распределение классов довольно равномерно (см. Изображение ниже).Точность моих тренировок и испытаний варьируется от 0,6 до 0,7 в зависимости от моих гиперпараметров.Precision и Recall также находятся на уровне около 0,7 для тестирования.

Последний слой моего NN - это Softmax с двумя единицами, и я использую categorical_crossentropy в качестве функции потерь.

После обучения я пытаюсь получить вероятности для каждого прогноза, используя model.predict(), но результаты для каждой вероятности почти всегда равны [0., 1.] или [1., 0.].Мне интересно, почему это происходит?

enter image description here enter image description here enter image description here

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

Вот упрощенная структура NN:

Глубокий компонент подается с вложениями непрерывных объектов, затем проходитчерез 3 слоя прямой связи с выпадениями между ними.

Широкий компонент - это однослойная логистическая регрессия, которая снабжается общими характеристиками категориальных данных.

out_layer = tf.keras.layers.concatenate([deep_component_outlayer, logistic_input])
output = tf.keras.layers.Dense(2, activation='softmax')(out_layer)
...