Я работал над проблемой НЛП с LSTM. Проблема заключается в мультиклассовой классификации с 3 классами (1,2 и 3). Поэтому я преобразовал целевые классы с помощью следующего кода: y_train=to_catgorical(y_train)
и аналогично для y_test
.
Но в выходном плотном слое, когда я пишу model.add((Dense(3,activation='softmax'))
, я получаю следующую ошибку:
Ошибка при проверке цели: ожидается, что плотность_1 будет иметь форму (Нет, 3), но получен массив с формой (658118, 4)
Однако, когда я фиксирую это на model.add((Dense(4,activation='softmax'))
, то есть n + 1 (n = число классов, которые должны быть предсказаны), это работает. Но в примерах Keras они работали с набором данных cifar10 и использовали число классов как 10, а не 11, и это работает.
Также в случае бинарной классификации (2 класса должны быть предсказаны) мы используем только 1 выход, т.е. model.add(Dense(1,"sigmoid"))
.
Я прошел этот пост , но все еще не смог найти убедительную логику для этой вещи, поэтому я хочу прояснить эту концепцию с помощью формы вывода плотного слоя в Keras.
P.S. Я понял, что Керас рассматривает классы из 0:num_classes
, поэтому мы должны сделать еще одно преобразование. Но спросить одну вещь, что векторный слой «0» тогда должен остаться неиспользованным, верно? А в случае набора данных cifar10 классы 0:9
, поэтому num_classes = 10 работают? Если это так, то если мы должны сделать прогноз из 3 классов, скажем (0,1 и 2), тогда мы можем использовать num_classes = 3, верно?