如何在python中使用LSTM将预测值的输出反馈回输入

数据挖掘 Python 喀拉斯 张量流 lstm
2022-03-11 01:42:01

这里的输入是 3。这里的输出 (LSTM) 是下一个 x1 输入应该是的概率。在这里意味着我有 x1x2 和 x3 输入值。第一个三个输入 LSTM 输出 1,然后是下一个,如果 x1 值 = 0,则 Lstm 输出 1 作为输入返回并预测下一个输出 2。如果此输出 2 值等于下一个 x1 值,则返回作为输入并预测输出 3。如果不等于,则不将输出 2 作为 x1 输入并将其作为上述 x1 输入。时间步长 t 的输出 (Yt) 取决于输入 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])

但这不起作用。输入和输出之间没有关系。

错误: 在此处输入图像描述

另一个例子:这里我有三个输入数据 x1,x2,x3 数据和时间序列。我想每隔一小时预测一次价值。(在 t+1 时)我有一个列,每一个小时(t+1)我都会获得价值。但有时我会在两个小时后测量值。因此,在过去时间和现在时间之间,存在一个未在 t+1 处测量的值。因此,我将预测在 t+1 时未测量的值。这里 x1 值取决于 t+1 处的输出值(y)。当我预测该时间段的值时,将其作为 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) 的第二个输入值。所以

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

然后我预测 t+1 =y2 处的值,假设它是 70,那么 y2(t+1) 值将作为 x1(t) 的 x1 列的第三个输入。所以

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

这是我想使用 LSTM 运行它的过程。

0个回答
没有发现任何回复~