2017-03-03 49 views
2

我目前與Keras一起工作LSTM,並且我有一個關於TimeDistributed層的問題。如何不在Keras中用`TimeDistributed`層輸出序列?

假設我有一個TimeDistributed圖層,其輸入內容類似(batch_size,timesteps,num_features1)。它會輸出類似(batch_size,timesteps,num_features2)

我想反而輸出類似(batch_size,num_features2)的東西。可能嗎 ?

這將是將一個帶有return_sequence = True的LSTM圖層堆疊到緻密層(使用TimeDistributed圖層),然後返回到接受像(batch_size,nb_features)這樣的輸入的「經典」密集圖層。

在此先感謝!

伯努瓦

+0

這意味着你想壓縮時間維度 - 你想怎麼做?最流行的方法是「全球共享」。以計時或採取最後的輸出。 –

+0

這個想法可能不是返回'(batch_size,timesteps,num_features)',我可以返回類似'(batch_size,timesteps)'的東西。謝謝,我會參與'全球共享'。 – BenDes

+0

關於您的問題的標題,事情是,TimeDistributed被設置爲應用並保留時間維度,因此無論如何它都會返回時間序列。您可以通過TimeDistributed影響唯一的功能是每個時間步的功能數量。您可以通過應用一個尺寸爲1的圖層將其縮小爲一個特徵,然後將其平坦化。但你不能從(None,timeteps,features)轉到(None,feat_1,feat-2)。我仍然不知道我得到你的問題 –

回答

0

我不知道確切地明白你想要所以我會把這裏的網絡,我認爲是你想要什麼。如果不是,請編輯您想要的網絡草稿和每個步驟的形狀。 知道你想用這個網絡實現什麼會更容易。

model = sequential() 
# shape = (None,timesteps, num_feat1) 
model.add(TimeDistributed(Dense(num_feat2)) 
# shape = (None,timesteps, num_feat2) 
model.add(LSTM(1, return_sequence=True)) 
# shape = (None, timesteps, 1) 
model.add(Flatten()) 
# shape = (None, timesteps) 
model.add(Dense(num_outputs_desired)) 
# shape = (None, outputs) 

是你想要的嗎?這(1)在每個時間步驟上均等地轉換初始特徵,並且密集層時間分佈,(2)用lstm處理該序列,在每個步驟返回1個值,(3)使用密集層將值序列轉換爲期望的輸出(我不知道它應該如何,你的模型的目標是什麼?)。

+0

是的,這正是我想要的!謝謝納西姆。我不知道'model.add(Flatten())' – BenDes

+0

歡迎:)很高興它幫助 –

相關問題