Ошибка классификации нескольких меток Keras "to_categorical"

Получение

IndexError: индекс 3 выходит за пределы оси 1 с размером 3

при попытке создать горячую кодировку с использованием Keras to_categorical в выходных векторах. Y.shape = (178,1). Пожалуйста помоги (:

import keras
from keras.models import Sequential
from keras.layers import Dense
import numpy as np

# number of wine classes
classifications = 3

# load dataset
dataset = np.loadtxt('wine.csv', delimiter=",")
X = dataset[:,1:14]
Y = dataset[:,0:1]

# convert output values to one-hot
Y = keras.utils.to_categorical(Y, classifications)

# creating model
model = Sequential()
model.add(Dense(10, input_dim=13, activation='relu'))
model.add(Dense(15, activation='relu'))
model.add(Dense(20, activation='relu'))
model.add(Dense(classifications, activation='softmax'))

# compile and fit model
model.compile(loss="categorical_crossentropy", optimizer="adam", 
metrics=['accuracy'])

model.fit(X, Y, batch_size=10, epochs=10)

person John Fisher    schedule 23.01.2018    source источник


Ответы (1)


Проблема заключается в том, что wine метки из диапазона [1, 3] и to_categorical классы индексов из 0. Это вызывает ошибку, когда пометка 3 как to_categorical рассматривает этот индекс как фактический 4-й класс - что несовместимо с количеством предоставленных вами классов. Самое простое решение - пронумеровать метки, начиная с 0, следующим образом:

Y = Y - 1
person Marcin Możejko    schedule 23.01.2018
comment
Спасибо. Это исправило это, однако точность моей сети не улучшилась на тестовом наборе во время обучения. Есть идеи, почему? - person John Fisher; 23.01.2018
comment
Что ж - есть много возможных причин. Я бы попытался сделать сеть более узкой по направлению к входу вместо того, чтобы становиться шире. - person Marcin Możejko; 23.01.2018
comment
До 98%, добавлена ​​еще пара скрытых слоев и сужена сеть. Спасибо еще раз. - person John Fisher; 23.01.2018
comment
@JohnFisher, поскольку ответ касается вашей проблемы, пожалуйста, примите его (ответы отнимают у респондентов драгоценное время) - см. Что мне делать, если кто-то ответит на мой вопрос? - person desertnaut; 23.01.2018
comment
@ MarcinMożejko Я знаю, что вы давно ответили на этот вопрос, но у меня похожая проблема: мои ярлыки [1, 2, 3, 4, 6, 7, 9, 10] (просто пример, у меня 25 классов), что я должен сделать, чтобы метка была правильной для to_categorical? - person Francesco Pegoraro; 26.09.2018