Я реализую задачу классификации 7 классов с нормализованными функциями и метками с горячим кодированием. Однако точность обучения и валидации была крайне низкой.
Как показано, я нормализовал функции с помощью метода StandardScaler(), и каждый вектор функций получается массивом из 54 dim. Кроме того, я закодировал метки следующим образом.
Как показано ниже, метки представляют собой (num_y, 7) пустые массивы.
Моя сетевая архитектура:
Здесь показано, как я разработал свою модель. И мне интересно, связан ли плохой результат с выбором функции потерь (я использовал категориальную кросс-энтропию)
Я ценю любой ответ от вас. Большое спасибо!
Использование точности явно неправильно. Код, на который я ссылаюсь, не указан в вашем вопросе, но я могу предположить, что вы сравниваете истинные метки с выходными данными вашей модели. Ваша модель, вероятно, возвращает вектор размерности 7, который представляет собой функцию плотности вероятности по классам (из-за активации softmax в вашем последнем слое), например:
Модель возвращает: (0,7 0 0,02 0,02 0,02 0,04 0,2) -- в сумме они дают 1, поскольку представляют вероятности
А затем вы сравниваете эти числа с: (1 0 0 0 0 0 0)
Вам нужно перевести выходные данные модели в соответствующую предсказанную метку ((0,7 0 0,02 0,02 0,02 0,04 0,2) соответствует (1 0 0 0 0 0 0), потому что первый выходной нейрон имеет большее значение (0,7)). Вы можете сделать это, применив функцию max после вывода вашей модели.
Чтобы убедиться, что это не так с вашей формулировкой проблемы, напечатайте вектор, который вы сравниваете с истинными метками, чтобы получить вашу точность, и проверьте, являются ли они 7 числами, сумма которых равна 1.
Спасибо, @Gaussian_Prior. Проблема была полностью решена.