[英]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.