Форма выходного слоя всегда (1,) - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь сделать простую модель Keras.Но независимо от того, какую выходную форму я указываю, выходной слой всегда имеет форму (1,), поэтому я не могу обучить свою модель из-за несовпадения выходного слоя и целевых данных.

import keras
from keras.models import Sequential
from keras.layers import InputLayer, LSTM, Dense

# 63 is the number of unique characters
# 128 is the length of a sequence of characters

X = ... # X is an one-hot ndarray; X.shape == (96092, 128, 63)
Y = ... # Y is an one-hot ndarray; Y.shape == (96092, 63)

model = Sequential()
model.add(InputLayer([128, 63]))
model.add(LSTM(96))
model.add(Dense(63))

model.compile(
  optimizer=keras.optimizers.RMSprop(1e-3, decay=1e-5),
  loss=keras.losses.sparse_categorical_crossentropy,
)

model.fit(X, Y) # ValueError: Error when checking target: expected dense_4 to have shape (1,) but got array with shape (63,)

Как вы можете видетьформа выходного плотного слоя равна (1,), но она должна иметь форму (63,).Что я делаю не так?

Я использую Google Colab с предустановленными Keras.

1 Ответ

2 голосов
/ 23 сентября 2019

Эта ошибка говорит о том, что форма выходного слоя равна 63. Однако по какой-то причине он ожидает 1.

В этом случаепричина, по которой он ожидает 1, заключается в том, что вы используете sparse_categorical_crossentropy, который ожидает целое число, представляющее индекс выходной категории.Вместо этого используйте categorical_crossentropy, что предполагает однократное кодирование выходной категории.

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