Keras в Python: Размеры LSTM - PullRequest
0 голосов
/ 06 марта 2019

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

X_train.shape = (134, 300000, 4)

X_train содержит 134 последовательности, с 300000 временных шагов и 4 функциями.

Y_train.shape = (134, 2)

Y_train содержит 134 метки, [1, 0] для True и [0, 1] для False.

Ниже моя модель в Керасе.

model = Sequential()
model.add(LSTM(4, input_shape=(300000, 4), return_sequences=True))
model.compile(loss='categorical_crossentropy', optimizer='adam')

Всякий раз, когда я запускаю модель, я получаю следующую ошибку:

Error when checking target: expected lstm_52 to have 3 dimensions, but got array with shape (113, 2)

Похоже, это связано с моими данными Y_train - так как его форма (113, 2).

Спасибо!

1 Ответ

2 голосов
/ 06 марта 2019

Выходная форма вашего слоя LSTM равна (batch_size, 300000, 4) (из-за return_sequences=True).Поэтому ваша модель ожидает, что цель y_train будет иметь 3 измерения, но вы передаете массив только с 2 измерениями (batch_size, 2).

Вы, вероятно, хотите использовать return_sequences=False вместо этого.В этом случае выходная форма слоя LSTM будет (batch_size, 4).Кроме того, вы должны добавить окончательный слой softmax к вашей модели, чтобы иметь желаемую выходную форму (batch_size, 2):

model = Sequential()
model.add(LSTM(4, input_shape=(300000, 4), return_sequences=False))
model.add(Dense(2, activation='softmax')) # 2 neurons because you have 2 classes
model.compile(loss='categorical_crossentropy', optimizer='adam')
...