簡體   English   中英

如何在python中使用LSTM將預測值的輸出反饋回輸入

[英]How to feed output of predict value back into the input using LSTM in python

這里的輸入是3。這里的輸出(LSTM)是下一個x1輸入應該是的概率。 意味着這里我有x1x2和x3輸入值。 首先輸入三個LSTM output1,然后如果x1值= 0,則返回Lstm output1作為輸入並預測下一個output2。 如果此輸出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])

但這是行不通的。 輸入和輸出之間沒有關系。

錯誤: 在此處輸入圖片說明

更改代碼后:

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])

錯誤: 在此處輸入圖片說明

另一個例子:這里我有三個輸入數據x1,x2,x3具有時間序列的數據。 我想每1小時預測一次價值。 (在t + 1時)我有一個y列,每隔一小時(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運行它的過程。

您應該使用pred1 = np.append(pred1, fit1.predict([x[i,None,:],pred1[i]]))而不是pred1.append(fit1.predict([x[i,None,:],pred1[i]]))pred1.append(fit1.predict([x[i,None,:],pred1[i]]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM