#python #tensorflow #machine-learning #keras #neural-network
#python #tensorflow #машинное обучение #keras #нейронная сеть
Вопрос:
Я пытаюсь построить модель для классификации некоторых данных (4 класса).
вот что я опробовал:
from keras.models import Sequential
from keras.layers import Dense
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X_data, y_target, random_state=0)
# define the keras model
model = Sequential()
model.add(Dense(64, input_dim=9, activation='relu'))
model.add(Dense(4, activation='softmax'))
# compile model
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit the model on the dataset
train_history = model.fit(X_train, y_train, epochs=100, batch_size=20, verbose=0, validation_data=(X_test, y_test))
# evaluate the keras model
_, accuracy = model.evaluate(X_data, y_target, verbose=0)
print('Accuracy: %.3f' % (accuracy*100))
Я получаю эту ошибку :
Received a label value of 4 which is outside the valid range of [0, 4).
Может кто-нибудь, пожалуйста, помочь мне понять, что не так с моей моделью?
Комментарии:
1. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.
2. какие данные вы используете? Вы используете метки
0,1,2,3
или1,2,3,4
? Модель ожидает метки0,1,2,3
, но она получает4
3. Спасибо @furas . Это работает, когда я меняю последний слой на 5. Что означает, я полагаю, что он начинает отсчет от 0 до 4. (1) Как я могу получить из него матрицу путаницы, чтобы я мог видеть выходной массив? (2) Если бы это был один класс, я бы дал 1 на последнем уровне, а не 0. Итак, почему это работает с последним слоем, имеющим значение 5, когда у меня есть 4 класса?
4. Я использовал метки 1, 2, 3, 4
5. вам придется сменить на
0,1,2,4
но с пандами это не проблема —df["label"] = df["label"] - 1
Ответ №1:
Благодаря @furas я решил свою проблему, изменив метки с [1 2 3 4]
на [0 1 2 3]
с помощью pandas: df["label"] = df["label"] - 1
Ответ №2:
На самом деле, если бы вы разделили данные из одного и того же фрейма с помощью train_test_split
, то эта ошибка не должна была возникнуть. Пожалуйста, проверьте данные еще раз. Также обязательно используйте stratify
опцию в train_test_split
.