我正在嘗試了解為時間序列預測開發的模型。它使用一個 Con1D 層和兩個 LSTM 層,然后是一個密集層。我的問題是,它應該Flatten() 在 LSTM 和 Denser 層之間使用嗎?在我看來,輸出應該只有一個值,形狀為(None, 1),可以通過Flatten()在 LSTM 和 Dense 層之間使用來實現。沒有Flatten(),輸出形狀將為(None, 30, 1)?;蛘?,我可以從第二個 LSTM 層中刪除return_sequences=True,我認為這與Flatten(). 哪種方式更合適?它們會影響損失嗎?這是模型。model = tf.keras.models.Sequential([ tf.keras.layers.Conv1D(filters=32, kernel_size=3, strides=1, padding="causal", activation="relu", input_shape=(30 ,1)), tf.keras.layers.LSTM(32, return_sequences=True), tf.keras.layers.LSTM(32, return_sequences=True), # tf.keras.layers.Flatten(), tf.keras.layers.Dense(1), ])這是沒有的模型摘要Flatten()Model: "sequential"_________________________________________________________________Layer (type) Output Shape Param # =================================================================conv1d (Conv1D) (None, 30, 32) 128 _________________________________________________________________lstm (LSTM) (None, 30, 32) 8320 _________________________________________________________________lstm_1 (LSTM) (None, 30, 32) 8320 _________________________________________________________________dense (Dense) (None, 30, 1) 33 =================================================================Total params: 16,801Trainable params: 16,801Non-trainable params: 0_________________________________________________________________
2 回答

DIEA
TA貢獻1820條經驗 獲得超3個贊
嗯,這取決于你想要達到的目標。我試著給你一些提示,因為我不是 100% 清楚你想要獲得什么。
如果您的 LSTM 使用return_sequences=True
,那么您將返回每個 LSTM 單元格的輸出,即每個時間戳的輸出。如果您隨后添加一個密集層,其中一個將添加到每個 LSTM 層的頂部。
如果您將展平層與 一起使用return_sequences=True
,那么您基本上是在刪除時間維度,就像(None, 30)
您的情況一樣。然后,您可以添加一個致密層或任何您需要的層。
如果你設置return_sequences=False
,你只會在你的 LSTM 的最后得到輸出(請注意,在任何情況下,由于 LSTM 的功能,它都是基于在之前的時間戳發生的計算),輸出將是這樣的(None, dim)
其中dim
等于您在 LSTM 中使用的隱藏單元數(即 32)。同樣,在這里,您可以簡單地添加一個帶有一個隱藏單元的密集層,以獲得您正在尋找的東西。
添加回答
舉報
0/150
提交
取消