Keras to_categorical добавляет дополнительную ценность

У меня есть 4 класса, которые мне нужно предсказать, для этого я использую keras to_categorical, я ожидал получить массив из 4 one-hot-encoded, но, похоже, вместо этого я получаю 5 значений, для всех строк появляется дополнительное значение [0]

dict = {'word': 1, 'feature_name': 2, 'feature_value': 3, 'part_number': 4}
    Y = dataset['class'].apply(lambda label: dict[label])
    print(Y.unique()) #prints [1 4 2 3]
    train_x, test_x, train_y, test_y = model_selection.train_test_split(X, Y, test_size=0.2, random_state=0)
    train_y = to_categorical(train_y)
    print(train_y[0])# prints [0. 0. 1. 0. 0.]

модель, которую я пытаюсь построить, выглядит следующим образом

model = Sequential()
model.add(Dense(10, input_dim=input_dim, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(4, activation='softmax'))

но потом продолжает кидать

ValueError: Error when checking target: expected dense_5 to have shape (4,) but got array with shape (5,)
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
8
0
4 366
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Может быть ошибка версии keras. Попробуйте обновить его, потому что это работает для меня:

dict = {'word': 1, 'feature_name': 2, 'feature_value': 3, 'part_number': 4}
Y = np.random.randint(4, size=10)
print(np.unique(Y)) #prints [0 1 2 3]
train_y = np_utils.to_categorical(Y, num_classes=4)
print(train_y[0]) # prints [0. 0. 1. 0.]

Попробуйте начать свой словарь с 0, потому что, когда Keras читает ваши данные, используйте 0 в качестве эталона.

dict = {'word': 0, 'feature_name': 1, 'feature_value': 2, 'part_number': 3}

Если это не работает, попробуйте принудительно указать количество классов:

train_y = to_categorical(train_y, num_classes = 4)

Это не ошибка версии. В вашем случае to_categorical (train_y, num_classes = 4) работает, потому что максимальное значение в вашем Y равно 3, а TS имеет Y = [1 4 2 3] с максимальным значением 4, он должен заставить num_classes = 5, чтобы его код работал .

Anna K. 30.07.2019 16:56

Вам нужно нумеровать классы, начиная с 0, например:

dict = {'word': 0, 'feature_name': 1, 'feature_value': 2, 'part_number': 3}

Вы можете получить описание функции с помощью команды help()

help(np_utils.to_categorical)

:

Help on function to_categorical in module keras.utils.np_utils:

to_categorical(y, num_classes=None, dtype='float32')
Converts a class vector (integers) to binary class matrix.

E.g. for use with categorical_crossentropy.

# Arguments
    y: class vector to be converted into a matrix
        (integers from 0 to num_classes).
    num_classes: total number of classes.
    dtype: The data type expected by the input, as a string
        (`float32`, `float64`, `int32`...)

# Returns
    A binary matrix representation of the input. The classes axis
    is placed last.

Другие вопросы по теме