Jaká by měla být Výstupní tvar keras model vrstev

0

Otázka

jsem trochu zmatená o výstupní tvar keras vrstvy. Vytvořil jsem vzorek keras model a také zobrazí její shrnutí.

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)

Shrnutí modelu

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

Co si myslím, že tvar poslední vrstva by měla být (None,64,1). Protože hidden_layers má 64 neuronů, které platí jako vstup do last_layer

keras tensorflow
2021-11-23 20:02:29
1

Nejlepší odpověď

1

Od nastavíte parametr return_sequences k True v LSTM vrstva, jste získali sekvence se stejným počtem časových kroků jako vstupní a výstupní místo z 1 pro každý timestep, tedy tvar (None, 129, 1). Poté, můžete použít Dense vrstva tohoto tenzoru, ale tato vrstva je vždy aplikován na poslední dimenze tenzor, což ve vašem případě je 1 a ne 129. Proto byste dostat výstup (None, 129, 64). Pak, můžete použít výstupní vrstva, která je také použita na poslední rozměr tenzor což v výstup s tvarem (None, 129, 1). Tensorflow docs také vysvětlit toto chování:

Pokud je vstupní vrstva má hodnost vyšší než 2, pak Husté vypočítá skalární součin mezi vstupy a jádra po poslední osy vstupy a osa 0 jádra (pomocí tf.tensordot).

Můžete nastavit return_sequences k False pokud chcete pracovat s 2D výstup (batch_size, features) místo 3D (batch_size, time_steps, features), nebo můžete použít Flatten vrstvy.

2021-11-24 08:30:26

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................