Проблема с формой результата при работе Neras Network Keras - PullRequest
0 голосов
/ 01 мая 2020

Я хочу сделать прогноз с помощью нейросети Keras. Мои выходные данные имеют 3 разных значения -1,0,1. Когда я запускаю свой NN, я получаю ошибку:

ValueError: Error when checking target: expected dense_35 to have shape (3,) but got array with shape (1,)

Затем я пытаюсь сделать:

from tensorflow.python.keras.utils import to_categorical
results = to_categorical(results)

Но снова я получаю ту же ошибку:

ValueError: Error when checking target: expected dense_35 to have shape (3,) but got array with shape (2,)

Что я делаю неправильно? Это мой код:

features = df.iloc[:,-8:]
results = df.iloc[:,-9]

x_train, x_test, y_train, y_test = train_test_split(features, results, test_size=0.3, random_state=42)


model = Sequential()
model.add(Dense(64, input_dim = x_train.shape[1], activation = 'relu')) # input layer requires input_dim param
model.add(Dense(32, activation = 'relu'))
model.add(Dense(16, activation = 'relu'))
model.add(Dense(3, activation = 'softmax'))

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

# call the function to fit to the data training the network)
es = EarlyStopping(monitor='val_loss', min_delta=0.001, patience=0, verbose=1, mode='auto')
model.fit(x_train, y_train, epochs = 10, shuffle = True, batch_size=128, validation_data=(x_test, y_test), verbose=2, callbacks=[es])

1 Ответ

1 голос
/ 01 мая 2020

results = df.iloc[:,-9] вы выбираете 1-й вывод (форма: (строки, 1)), но ваш последний слой имеет 3 единицы model.add(Dense(3, activation = 'softmax')).

Итак, ваш результат должен иметь форму: ( строки, 3) не (строки, 1).

Я вижу, ваш результат имеет значения -1, 0, 1. Просто добавьте единицу, чтобы они были 0, 1, 2. Вот почему вы получаете ошибку с to_categorical; в соответствии с документами ожидается, что

y: вектор класса будет преобразован в матрицу (целые числа от 0 до num_classes).

Итак go для

results = results + 1

Затем примените to_categorical.

После этого fit должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...