!!ValueError: Ошибка при проверке ввода: ожидалось, что lstm_2_input будет иметь 3 измерения, но получит массив с формой (4982, 12) - PullRequest
0 голосов
/ 03 апреля 2019

Я новичок в Deep Learning и пытаюсь создать эту простую архитектуру LSTM в Keras с использованием Google Colab:

  1. Входной слой из 12 входных нейронов
  2. Один Текущий скрытый слой из 1 скрытого нейрона на данный момент
  3. Выходной слой из 1 выходного нейрона

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

ValueError: Error when checking input: expected lstm_2_input to have 3 dimensions, but got array with shape (4982, 12).

Тогда я попробовал:

input_shape=train_x.shape[1:]

Но я получил:

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

Тогда я попробовал:

X_train = np.reshape(X_train, X_train.shape + (1,))

Но я снова получил другую ошибку:

ValueError: Must pass 2-d input

Тогда я попробовал:

train_x = np.reshape(train_x, (train_x.shape[0], 1, train_x.shape[1]))

Но это не сработало:

Must pass 2-d input

Вот мой оригинальный код:

df_tea = pd.read_excel('cleaned2Apr2019pt2.xlsx')
df_tea.head()

train_x, valid_x = model_selection.train_test_split(df_tea,random_state=2, stratify=df_tea['offer_Offer'])

train_x.shape #(4982, 12)
valid_x.shape #(1661, 12)

model = Sequential()
model.add(LSTM(32, input_shape=train_x.shape, return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc'])
history = model.fit(train_x, valid_x,
                    epochs=10,
                    batch_size=128,
                    validation_split=0.2)

Я просмотрел несколько предложений stackoverflow и github для аналогичной проблемы, но ни один из них не работает.

Может ли кто-нибудь помочь мне, пожалуйста, так как я не понимаю, почему все эти методы потерпели неудачу.

1 Ответ

2 голосов
/ 04 апреля 2019

Согласно вашему коду, временные шаги = 1 (в терминологии LSTM), input_dim = 12. Следовательно, вы должны указать input_shape = (1,12) Общая формула: input_shape = (None, timesteps, input_dim) или input_shape = (timesteps, input_dim)

Пример:

import numpy as np
from keras.layers import LSTM, Dense
from keras.models import Sequential
n_examples = 4982 #number of examples
n_ft = 12 #number of features
train_x= np.random.randn(n_examples, n_ft)
#valid_x.shape #(1661, 12)

model = Sequential()
model.add(LSTM(32, input_shape=(1, n_ft), return_sequences=True))
model.add(LSTM(32, return_sequences=True))
model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['acc'])
model.summary()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...