ValueError: вход 0 несовместим со слоем lstm_60: ожидается ndim = 3, найдено ndim = 2 - PullRequest
1 голос
/ 31 марта 2020

Я хочу построить глубокий RNN, где моя x_train форма равна (318,39), а моя y_train имеет форму (318,). Когда я выполняю код ниже:

model.add(LSTM(20,input_shape=(X_train.shape[1:]), activation='relu', return_sequences=True))
model.add(LSTM(20, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
history = model.fit(X_train,y_train,batch_size=20,epochs=250)

Я получаю следующую ошибку:

ValueError: Input 0 is incompatible with layer lstm_60: expected ndim=3, found ndim=2

Ответы [ 3 ]

1 голос
/ 31 марта 2020

Поскольку вы используете LSTM, я предполагаю, что ваши входные данные являются последовательными, то есть у вас есть 318 примеров, где каждый пример имеет 39 временных шагов? Если это так, вы должны сначала правильно изменить ваши входные данные, такие как:

import numpy as np
X_train = np.expand_dims(X_train, -1) 

Это изменит ваш X_train, чтобы иметь форму (318, 39, 1), и тогда он будет работать (Только если мое первоначальное предположение правильно)

1 голос
/ 31 марта 2020

Просто измените форму X_train

X_train.reshape(X_train.shape[0],X_train.shape[1],1)

перед функцией подгонки.

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

1 голос
/ 31 марта 2020

Ожидаемая форма ввода слоя LSTM: [batch, timesteps, feature]. Вы проходите [batch, timesteps]. То, что вы хотите сделать, это передать [batch, timesteps, 1] (разверните измерение справа). Вы можете сделать это так:

X_train = X_train[..., None]
...