[英]LSTM seq2seq input and output with different number of time steps
我是這個領域的新手,目前正在使用 keras 進行視頻動作預測項目。 輸入數據占用每個視頻的 10% 幀,並將所有相同的連續動作轉換為 1 個單個動作。 例如 [0,0,0,1,1,1,2] -> [0,1,2]。 應用填充和 one-hot 編碼后,輸入數據的形狀為 (1460, 6, 48) -> (視頻數,動作數,48 個動作的 one-hot 編碼形式)。 我想預測每個視頻的所有未來動作。 output 的形狀應該是 (1460, 23, 48) -> (視頻數,最大時間步長,48 個動作的一鍵編碼形式)。
這是我目前的方法,它不起作用。
def lstm_model(frame_len, max_timesteps):
model = Sequential()
model.add(LSTM(100, input_shape=(None,48), return_sequences=True))
model.add(Dense(48, activation='tanh'))
model.compile(loss='mae', optimizer='adam', metrics=['accuracy'])
model.summary()
return model
我想知道我是否必須保持輸入和 output 的時間步數相同。 如果沒有,我如何修改 model 以適應此類數據。
任何幫助,將不勝感激。
你可以這樣做:
在 keras 中,它看起來像:
from tensorflow.keras import layers,models
input_timesteps=10
input_features=2
output_timesteps=3
output_features=1
units=100
#Input
encoder_inputs = layers.Input(shape=(input_timesteps,input_features))
#Encoder
encoder = layers.LSTM(units, return_sequences=False)(encoder_inputs)
#Repeat
decoder = layers.RepeatVector(output_timesteps)(encoder)
#Decoder
decoder = layers.LSTM(units, return_sequences=True)(decoder)
#Output
out = layers.TimeDistributed(Dense(output_features))(decoder)
model = models.Model(encoder_inputs, out)
它給你:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 10, 2)] 0
_________________________________________________________________
lstm (LSTM) (None, 100) 41200
_________________________________________________________________
repeat_vector (RepeatVector) (None, 3, 100) 0
_________________________________________________________________
lstm_1 (LSTM) (None, 3, 100) 80400
_________________________________________________________________
time_distributed (TimeDistri (None, 3, 1) 101
=================================================================
如果您想保留編碼器中的單元 state 以在解碼器中重新使用,您可以使用return_state=True
來實現。 檢查這個問題。
雖然您不必保持它們相同,但您確實需要在 LSTM 之后添加全連接層以更改維度,或者使用 MaxPool2D 或類似類型的層。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.