給定 30 個時間戳,每個時間戳具有 3 個特征,我想預測一個包含 4 個不同數量的單個輸出。
我有一個X_train和y_train形狀(72600, 30, 3)和(72600, 4)分別。
對于 X_train,
- 72600 代表樣本數
- 30 表示考慮的時間戳數
- 3 代表每個時間戳的特征數量
例如 X_train[0] 看起來像這樣:
[
[1,2,3],
[4,5,6],
... such 30 rows
]
在 y_train 中,4 表示要預測的輸出數量。
我嘗試了以下代碼,
model = Sequential()
model.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(units = 50, return_sequences = True))
model.add(Dropout(0.2))
model.add(LSTM(units = 50, return_sequences = True))
model.add(Dropout(0.2))
model.add(Dense(units = 4))
在通過單個大小樣本后,我從這個模型中得到的輸出(1, 30, 3)是形狀:(1, 30, 4)
但我只想要形狀 (1, 4) 的輸出。
那我該怎么做呢?
uj5u.com熱心網友回復:
在最后LSTM一層中,您必須將return_sequences引數設定False為 才能獲得一維輸出:
import tensorflow as tf
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(units = 50, return_sequences = True, input_shape = (30, 3)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.LSTM(units = 50, return_sequences = True))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.LSTM(units = 50))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(units = 4))
model(tf.random.normal((1, 30, 3)))
<tf.Tensor: shape=(1, 4), dtype=float32, numpy=
array([[-1.3130311e-03, 1.0584719e-02, -6.3279571e-05, -2.3087783e-02]],
dtype=float32)>
因此,您的最后LSTM一層不是回傳給定序列的序列,而是僅回傳最后一個LSTM單元格的輸出狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347404.html
下一篇:使用隨機索引更新張量的隨機值
