Прогнозирование данных временного ряда с помощью LSTM в Керасе - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь подготовить модель, которая будет предсказывать первые два числа из заданного массива чисел.Таким образом, входной набор данных выглядит так -

[1 2 3 5] [4 8 5 9] [10 2 3 15]

Выход будет - [1 2] [4 8] [10 2]

Итак, архитектуры RNN такие, как показано ниже (взято из здесь )

enter image description here Тогда базовая архитектура, которую я пытаюсь достичь, должна быть чем-то близкой к этому -

Итак, это должна быть сеть «многие ко многим».(Напоминает четвертое изображение)

Вопрос - Итак, как я могу создать этот тип модели с Keras?

Мои выводы -

Я пробовал что-то вроде этого -

n_samples = 10000
input = np.random.randint(5,10, (n_samples,5))
output = input[...,0:2]
rinp = input.reshape(n_samples,1,5)

model = Sequential()
model.add(LSTM(10, input_shape=(1,5)))
model.add(Dense(2))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(rinp, output, epochs=1000, batch_size=500, verbose=1)

Но, как вы можете видеть, это даже не близко.Это как MLP.Он не использует никаких временных шагов.Потому что форма ввода - (n_samples,1,5).Итак, есть только один временной шаг.

Итак, моя реализация неверна.

Я видел несколько примеров «один-к-одному», «многие-к-одному» и «многие-к-одному»-Многие примеры из здесь .

В примере "многие ко многим" автор использовал следующий фрагмент кода.

length = 5
seq = array([i/float(length) for i in range(length)])
X = seq.reshape(1, length, 1)
y = seq.reshape(1, length, 1)
# define LSTM configuration
n_neurons = length
n_batch = 1
n_epoch = 1000
# create LSTM
model = Sequential()
model.add(LSTM(n_neurons, input_shape=(length, 1), return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mean_squared_error', optimizer='adam')
print(model.summary())
# train LSTM
model.fit(X, y, epochs=n_epoch, batch_size=n_batch, verbose=2)
# evaluate
result = model.predict(X, batch_size=n_batch, verbose=0)
for value in result[0,:,0]:
    print('%.1f' % value)

Как видно из *При значениях 1048 * и y описанная модель похожа на приведенную ниже -

Это не та цель, которую я пытаюсь достичь.

Любой пример, касающийся архитектуры, которую я пытаюсь реализовать, был бы очень полезен.

1 Ответ

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

Похоже, вы пытаетесь построить модель Sequence-to-Sequence (seq2seq) на основе чертежа.Существует очень хороший учебник онлайн , с которого можно начать.Вместо того, чтобы предсказывать предложения, вы можете просто предсказать токены фиксированной длины длины 2. Эта архитектура и варианты часто используются для машинного перевода.Основываясь на ваших данных, я предполагаю, что вы пытаетесь экспериментировать с проблемой долгосрочных зависимостей в рекуррентных сетях;в противном случае не имеет смысла использовать seq2seq для каких-либо практических целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...