Керас - ожидается плотный, чтобы иметь форму - PullRequest
0 голосов
/ 31 марта 2020

Я делаю плотную модель ML с Keras, но я получаю эту ошибку

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

Так настроена моя модель

get_custom_objects().update({'swish': Swish(swish)})

model = Sequential()
model.add(Dense(33, activation='swish', input_shape=(trainX.shape[1],)))
model.add(Dense(33, activation='swish'))
model.add(Dense(9, activation='softmax'))

#Train Network
model.compile(optimizer="adam", loss=keras.losses.sparse_categorical_crossentropy, metrics=["accuracy"])
model.fit(trainX, trainY, validation_split=0.2, epochs=3)

trainX и trainY равны pandas DataFrames trainX имеет 2 столбца, а trainY - 9.

Я не уверен, почему он говорит, что это должно быть (1,), так как я указал выходной слой для 9 нейронов.

Любой помощь очень ценится.

1 Ответ

2 голосов
/ 31 марта 2020

Из документов Keras:

При использовании потери sparse_categorical_crossentropy ваши цели должны быть целочисленными. Если у вас есть категориальные цели, вы должны использовать categoryor_crossentropy.

Таким образом, вы должны заменить

model.compile(optimizer="adam", loss=keras.losses.sparse_categorical_crossentropy, metrics=["accuracy"])

на

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

Это необходимо, потому что trainY является категориальной целью, поскольку у нее 9 столбцов вместо одного целого числа.

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