![](/img/trans.png)
[英]How can I use a stateful LSTM model to predict without specifying the same batch_size as I trained it?
[英]Can I split my long sequences into 3 smaller ones and use a stateful LSTM for 3 samples?
我正在做一個時間序列序列分類問題。
我有 80 個時間序列,全長 1002。每個序列對應於 4 個類別中的 1 個(銅、鎘、鉛、汞)。 我想使用 Keras LSTM 到 model 這個。 這些模型需要以[batches, timesteps, features]
的形式提供數據。 由於每個 seq 都是獨立的,最基本的設置是X_train
具有形狀[80, 1002, 1]
。 這在 LSTM 中工作正常(有stateful=False
)
但是,1002 是一個相當長的序列長度。 較小的尺寸可以表現更好。
假設我將每個 seq 分成 334 的 3 部分。我可以繼續使用無狀態 LSTM。 但是(我認為?)讓它對 3 個樣本有狀態然后重置 state 是有意義的(因為 3 個塊是相關的)。
如何在 Keras 中實現這一點?
First, I transform the data into shape [240, 334, 1]
using a simple X_train.reshape(-1, 334, 1)
but how do I maintain the state for 3 samples and then reset the state in model.fit()
?
我知道我需要在某處調用model.reset_states()
但找不到任何示例代碼來告訴我如何工作。 我是否必須對 model 進行子類化? 我可以使用for epoch in range(num_epochs)
和GradientTape
來做到這一點嗎? 我有哪些選擇? 我該如何實施?
另外,如果我將序列拆分,我該如何處理標簽? 我是否將它們乘以每個 seq 分成的塊數(在這種情況下為 3)? LSTM 有沒有辦法攝取 3 個樣本然后吐出一個預測? 還是每個樣本都必須對應一個預測?
最后,如果我將我的序列分成 3 個子序列,我是否必須有 3 個批量大小? 或者我可以選擇 3 的任意倍數嗎?
這是我與X_train.shape == [80, 1002, 1]
一起使用的超級基本代碼。
model = Sequential([
LSTM(10, batch_input_shape=(10, 1002, 1)), # 10 samples per batch
Dense(4, activation='sigmoid')
])
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.fit(X_train, y_train, epochs=3, batch_size=10, shuffle=False)
我知道這里有很多問題,如果這對一個人來說太多了,我很樂意提出單獨的問題。
簡單的解決方案是將數據從具有 1 個特征重塑為具有 3 個特征。
將[80, 1002, 1]
變成[80, 334, 3]
而不是[240, 334, 1]
。 這使樣本數量保持不變,因此您不必弄亂有狀態。 您也可以將它與普通的fit()
API 一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.