我對 keras 層的輸出形狀有點困惑。我創建了一個示例 keras 模型并顯示了它的摘要。
numberOfLSTMcells=1
n_timesteps_in=129
n_features=61
inp =Input(shape=(n_timesteps_in, n_features))
lstm= LSTM(numberOfLSTMcells,return_sequences=True, return_state=False) (inp)
fc=Dense(64,activation='relu',name='hidden_layer')(lstm)
out=Dense(1,activation='sigmoid',name='last_layer')(fc)
model = Model(inputs=inp, outputs=out)
型號概要
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_3 (InputLayer) [(None, 129, 61)] 0
_________________________________________________________________
lstm_2 (LSTM) (None, 129, 1) 252
_________________________________________________________________
hidden_layer (Dense) (None, 129, 64) 128
_________________________________________________________________
last_layer (Dense) (None, 129, 1) 65
=================================================================
Total params: 445
Trainable params: 445
Non-trainable params: 0
我認為最后一層的形狀應該是什么(None,64,1)。因為 hidden_??layers 有 64 個神經元作為 last_layer 的輸入
uj5u.com熱心網友回復:
由于您將引數設定return_sequences為TrueinLSTM層,您將獲得一個序列,其時間步長與輸入相同,每個時間步長的輸出空間為 1,因此形狀為(None, 129, 1)。之后,您將一個Dense層應用于該張量,但該層始終應用于張量的最后一個維度,在您的情況下是 1 而不是 129。因此您得到輸出(None, 129, 64)。然后,您使用最終輸出層,該層也應用于張量的最后一個維度,從而產生形狀為 的輸出(None, 129, 1)。Tensorflow檔案提到也解釋了這種行為:
如果層的輸入的秩大于 2,則 Dense 將沿輸入的最后一個軸和內核的 0 軸計算輸入和內核之間的點積(使用 tf.tensordot)。
如果您想使用 2D 輸出而不是 3D ,您可以設定return_sequences為,或者您可以使用圖層。False(batch_size, features)(batch_size, time_steps, features)Flatten
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/364526.html
