Как передать вывод предсказанного значения обратно на вход, используя LSTM в python - PullRequest
0 голосов
/ 12 февраля 2019

Входные данные здесь - 3. Выходные данные здесь (LSTM) - вероятности, которыми должен быть следующий x1 вход.Значит здесь у меня есть входные значения х1х2 и х3.Первые три входа LSTM output1, а затем следующий, если значение x1 = 0, тогда Lstm output1 возвращается в качестве входа и прогнозирует следующий выход2.Если это значение выхода 2 равно следующему значению x1, вернитесь к нему как к входу и предскажите выход 3. Если не равно, не принимать выход 2 как вход x1 и принимайте его как упомянутый вход x1.Выход (Yt) на временном шаге t зависит от входа X1t и от предыдущего выхода Yt-1.в качестве примера

x1   x2    x3    predict (output)
100  30    40     120
 0   20    10     130
140  15    30     160

здесь второе значение столбца x1 равно 0, значение x1 = 0, затем примите значение в качестве вывода 1

x1 = output1

здесь столбец x1 3-е значение измерено и выведено 2значение не равно x1 3-го значения.затем принять входные данные в качестве измеренного значения.Так что это метод, который я хочу сделать.Но я не знаю, как это написать.Может кто-нибудь поможет мне сделать это?мой код LSTM:

fit1 = Sequential ()
fit1.add(LSTM(32, return_sequences=True, activation='relu',input_shape=(3,1)))
fit1.add((LSTM(32, return_sequences=True)))
fit1.add(LSTM(32))
fit1.add(Dense(1))
batchsize = 3
fit1.compile(loss="mean_squared_error",optimizer="adam")
fit1.fit(x_train , y_train , batch_size = batchsize, nb_epoch =10,shuffle=True)
pred1=fit1.predict(x_test)
for i in range(len(x)):
    pred1.append(fit1.predict([x[i,None,:],pred1[i]]))
pred1 = np.asarray(pred1)
pred1 = pred1.reshape(pred1.shape[0],pred1.shape[2])

Но это не работает.нет связи между входом и выходом.

ошибка: enter image description here

После изменения кода:

for i in range(len(x)):
pred1 = np.append(pred1, fit1.predict([x[i,None,:],pred1[i]]))
pred1 = np.asarray(pred1)
pred1 = pred1.reshape(pred1.shape[0],pred1.shape[2])

ошибка: enter image description here

Другой пример: здесь у меня есть три входных данных x1, x2, x3 с временными рядами.Я хочу прогнозировать значение в каждом часе.(в момент времени t + 1) У меня есть столбец y, в котором я получаю значение каждые один час (t + 1).Но иногда я измерял значение через два часа.Таким образом, между прошедшим временем и настоящим временем есть значение, не измеренное в момент времени t + 1.Поэтому я буду предсказывать значение, которое я не измерял при t + 1.Здесь значение x1 зависит от выходного значения (y) при t + 1.Когда я предсказываю значение в этот период времени, принимаю его за y1 (t + 1), это значение должно считываться как значение x1 как x1 (t), чтобы предсказать следующее выходное значение при t + 1 (y2).Если я измерил это значение в момент времени t + 1, если мое прогнозируемое значение == измеренное значение, прочитайте его как x1 (t), чтобы предсказать следующее значение в момент времени t + 1.Это процесс, который я хочу написать как код.Вот пример:

time     x1(t)     x2(t)     x3(t)     y(t+1)
6:00:00  120        0         0         110 (I measured it at t+1)

, когда я прогнозирую это с помощью LSTM, если это значение == измеренное значение (t + 1), считайте его как второе входное значение столбца x1 (t).если не равно, считайте измеренное значение как второе входное значение x1 (t).SO

7:00:00  110       40         10         0  (not measured value at t+1)

Затем я прогнозирую значение при t + 1 = y2, предположим, что пришло 70, тогда значение y2 (t + 1) будет третьим входом столбца x1 как x1 (t).Так что

8:00:00  70        0          30         200 (I measured value at t+1)

это процесс, который я хочу запустить с помощью LSTM.

1 Ответ

0 голосов
/ 13 февраля 2019

Вы должны использовать pred1 = np.append(pred1, fit1.predict([x[i,None,:],pred1[i]])) вместо pred1.append(fit1.predict([x[i,None,:],pred1[i]])).

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