Я начал работать в проекте по распознаванию эмоций. Моей первой попыткой было использование базы данных FER2013 https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data. Тогда я понял, что получил максимальную точность 66%. Чтобы улучшить это, я попытался работать с той же базой данных, но с лучшей маркировкой: вот эта работа с репозиторием https://github.com/microsoft/FERPlus. Используя tenorflow, я не могу следить за этим github.
Я попробовал вот что: я получил пиксели 48x48 первого csv-файла (исходного) (это будет мой ввод, мой x). Затем я получил маркировку fer2013plus (это будет мой вывод, мой y). Проблема в том, что когда я получил эту новую маркировку, я получаю функцию вероятности. Позвольте мне объяснить.
В исходном csv каждая эмоция была связана с числом, например 1,2,3 ... Типичная проблема классификации, в этом нет никаких проблем. В fer2013 plus каждая эмоция пронумерована с целым числом до 10, поэтому мы можем рассматривать это как вероятность того, что изображение будет иметь определенную эмоцию. Я надеюсь, что это кристально ясно до сих пор. Просто чтобы уточнить, в оригинальном fer2013 было 7 эмоций, а в новом 8, но они добавляют еще два столбца для NF (не лицо) и неизвестно.
Чтение большого количества статей, для этого проблема и использование керас рекомендуется использовать binary_crossentropy в качестве функции потерь и сигмоид в конце модели. Что я совсем не понимаю, так это следующая идея:
Когда мне приходится кормить свою нейронную сеть, в общей задаче классификации вы создаете категориальное значение для каждого тега, например: грусть номер 1, поэтому категориальное значение равно [0 1 0 0 0 0 0] (если есть 7 эмоций).
В случае вероятности, именно в этом случае, я попытался запустить этот код
df_emotion = pd.read_csv('fer2013new.csv')
y_emotion_df = df_emotion.loc[:, ['neutral', 'happiness', 'surprise', 'sadness', 'anger','disgust', 'fear', 'contempt']]
y_emotion_array = np.asarray(y_emotion_df)
emotions = tf.keras.utils.normalize(y_emotion_array, axis=-1, order=1)
Используя это, я пытался получить все вероятности от 0 до 1. Обучая свою модель, я получил точность 80%, во второй эпохе я получил точность 70% (что странно). Я попытался использовать эту модель, чтобы предсказать первые 5 строк моих значений x, и она просто дала мне векторы 1 во всех их компонентах, так что все не так. Что я делаю неправильно? Я должен создать категорические ценности, например, первых двух самых высоких эмоций вероятности каждого изображения? Например, в случае 8 эмоций и первого гнева и неожиданности изображения (столбцы 1 и 3) создайте категориальное значение [0 1 0 1 0 0 0 0]?
Если вам нужно больше код, например, тренинг или подготовка данных, просто спросите его. Спасибо