ValueError: Ошибка при проверке ввода: ожидалось, что input_1 будет иметь форму (None, 1), но получил массив с формой (5, 54) - PullRequest
0 голосов
/ 16 мая 2018

Я реализую модель lstm с кератами.

В моем наборе данных 11200 строк и 5 столбцов. Каждые данные - это вектор. Форма набора данных (11200, 5, 54) выглядит следующим образом.

col1 col2 col3 col4 col5

[1,3,...,-999] [2,4,...,-999] [3,4,...,-999] [5,6,...,-999] [4,5,...,-999]

[0,2,...,-999] [1,5,...,-999] [1,24,...,-999] [11,7,...,-999] [-1,4,...,-999]

...

[0,2,...,5] [1,5,...,8] [1,24,...,6] [11,7,...,5] [-1,4,...,2]

Длина каждого вектора, подобного этому [1,3, ..., - 999], равна 54.

Цель - логический вектор размера (11200, 1), подобный этому

1      T

2      F

...    ...

11200  F   

Я создал свою модель так:

X_train, X_test, y_train, y_test = train_test_split(data,target, test_size=0.2, random_state=1)  
batch_size = 32 
timesteps = None 
output_size = 1
epochs=120

inputs = Input(batch_shape=(batch_size, timesteps, output_size))
lay1 = LSTM(20, stateful=True, return_sequences=True)(inputs)
output = Dense(units = output_size)(lay1)
regressor = Model(inputs=inputs, outputs = output)
regressor.compile(optimizer='adam', loss = 'mae')
regressor.summary()

for i in range(epochs):
    print("Epoch: " + str(i))
    regressor.fit(X_train, y_train, shuffle=False, epochs = 1, batch_size = batch_size)
    regressor.reset_states()

Проблема в том, что у меня есть эта ошибка:

ValueError: Error when checking input: expected input_1 to have shape (None, 1) but got array with shape (5, 54).

Что не так? Вход или выход? Как я могу кормить не того?

Спасибо.

1 Ответ

0 голосов
/ 16 мая 2018

Проблема в форме слоя Input:

inputs = Input(batch_shape=(batch_size, timesteps, output_size)) # output_size = 1

где вам нужно, чтобы конечный размер был 54 вместо output_size, поэтому batch_shape=(batch_size, timesteps, 54). Наличие timesteps=None не проблема, если вы установите 5, это позволит вам при необходимости развернуть LSTM, что может ускорить вычисления. В противном случае он говорит для некоторого неизвестного количества временных шагов, в вашем случае это 5.

...