Вывод плотного слоя Keras - ошибка формы - PullRequest
0 голосов
/ 27 июня 2018

Я работал над проблемой НЛП с 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, верно?

1 Ответ

0 голосов
/ 27 июня 2018

Возможно, важно отметить использование инфраструктуры Keras для обеспечения функции быстрого кодирования:

from keras.datasets import cifar10
from keras.utils import np_utils    
y_label_train_OneHot = np_utils.to_categorical(y_label_train)
y_label_test_OneHot = np_utils.to_categorical(y_label_test)

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

...