Keras LSTM Multiclass Классификация для временных рядов - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь классифицировать свои входные данные временных рядов по 10 классам ответов. Таким образом, у меня есть 10 классов в моей функции ответа.

Мои входные данные имеют 40 функций, а ответ (y_train) имеет 1 функцию с 10 классами.

train input shape (4320, 43), train_y shape (4320,)

Моя сеть LSTM выглядит следующим образом

model = Sequential()
model.add(LSTM(25, dropout=0.2, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(train_X, train_y, epochs=10, batch_size=36,  validation_split =0.05)

И яполучить ошибку

Error when checking target: expected dense_21 to have shape (10,) but got array with shape (1,)

Я думаю, что это происходит, потому что у меня есть 1 функция в моем train_y , где плотный выходной слой ожидает 10 объектов. Как запустить мою мультиклассовую классификацию по временным рядам с функцией потерь категорийной энтропии?

Кроме того, как только я изменяю функцию потерь на sparse_categorical_entropy , она работает гладко.

model = Sequential()
model.add(LSTM(25, dropout=0.2, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(10, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(train_X, train_y, epochs=10, batch_size=36,  validation_split =0.05)

Пожалуйста, помогите мне понять причину этого. Кроме того, какую функцию потерь я должен использовать для временных рядов классификации мультикласса?

1 Ответ

1 голос
/ 23 октября 2019

Первоначальная ошибка:

Error when checking target: expected dense_21 to have shape (10,) but got array with shape (1,)

Возможно из-за y_train, не преобразованного в категориальную меру. Вам нужно очистить данные y_train и затем преобразовать их в требуемый категориальный массив из 10 классов с помощью, может быть, кодирования в одно касание.

Проще говоря, categorical_crossentropy следует использовать только для данных, равных единице. -hot кодируется.

[1, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
...

В противном случае sparse_categorical_crossentropy имеет дело с целыми числами.

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