Ввод данных временного ряда для модели LSTM выдает ошибку - PullRequest
0 голосов
/ 08 апреля 2019

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

   date      mentions   likes  retweets  polarity  count   Volume   Close
2017-04-10     0.24     0.123    -0.58     0.211    0.58    0.98    0.87
2017-04-11    -0.56     0.532     0.77     0.231   -0.23    0.42    0.92
.
.
.
2019-01-10     0.23     0.356    -0.21    -0.682    0.23   -0.12   -0.23

Размер данных (608, 8), и я планирую использовать функции от 2 до 7 столбцов, а цель, которую я прогнозирую, - Close (т.е. столбец 8).Мне известно, что модели LSTM требуют, чтобы входные данные имели форму 3D-тензоров, поэтому я сделал несколько операций для преобразования и изменения данных:

x = np.asarray(data.iloc[:, 1:8])
y = np.asarray(data.iloc[:. 8])

x = x.reshape(x.shape[0], 1, x.shape[1])

Впоследствии я попытался обучить модель LSTM следующим образом:

batch_size = 200
model = Sequential()

model.add(LSTM(batch_size, input_dim=3, activation='relu', return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1))

model.compile(loss='mean_squared_error', 
              optimizer='rmsprop', 
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=15)

Запуск этой модели дает мне:

ValueError: Error when checking input: expected lstm_10_input to have 
shape (None, 3) but got array with shape (1, 10)

Кто-нибудь знает, где я ошибся?Это то, как я подготовил данные, или я неправильно обучил модель?

Я читал много связанных вопросов по этому сообществу, а также по статьям / блогам, но мне все еще не удается найти решение... Любая помощь приветствуется, спасибо!

1 Ответ

1 голос
/ 08 апреля 2019

Ошибка 1:

Форма x должна иметь форму (batch_size, timesteps, input_dim)

Ошибка 2:

Первый аргумент LSTM - это не размер пакета, а выводразмер

Пример:

df = pd.DataFrame(np.random.randn(100,9))

x_train = df.iloc[:,1:8].values
y_train = df.iloc[:,8].values

# No:of sample, times_steps, input_size (1 in your case)
x_train = x_train.reshape(x_train.shape[0],x_train.shape[1], 1)

model = Sequential()
# 16 outputs of first LSTM per time step
model.add(LSTM(16, input_dim=1, activation='relu', return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(8, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(4, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1))

model.compile(loss='mean_squared_error', 
              optimizer='rmsprop', 
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=15, batch_size=32)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...