keras to_categorical добавляет дополнительную ценность - PullRequest
0 голосов
/ 22 мая 2019

У меня есть 4 класса, которые мне нужно предсказать, я использую keras '1001 *, чтобы достичь этого, я ожидал получить массив 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,)

1 Ответ

1 голос
/ 22 мая 2019

Может быть ошибка версии 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)
...