Как применить среднее объединение на каждом временном шаге вывода lstm?

#tensorflow #keras #deep-learning #lstm

#tensorflow #keras #глубокое обучение #lstm

Вопрос:

Я пытаюсь применить среднее объединение на каждом временном шаге вывода lstm, пожалуйста, найдите мою архитектуру, как показано ниже

 X_input = tf.keras.layers.Input(shape=(64,35))
X= tf.keras.layers.LSTM(512,activation="tanh",return_sequences=True,kernel_initializer=tf.keras.initializers.he_uniform(seed=45),kernel_regularizer=tf.keras.regularizers.l2(0.1))(X_input)
X= tf.keras.layers.LSTM(256,activation="tanh",return_sequences=True,kernel_initializer=tf.keras.initializers.he_uniform(seed=45),kernel_regularizer=tf.keras.regularizers.l2(0.1))(X)
X = tf.keras.layers.GlobalAvgPool1D()(X)
X = tf.keras.layers.Dense(128,activation="relu",kernel_initializer=tf.keras.initializers.he_uniform(seed=45),kernel_regularizer=tf.keras.regularizers.l2(0.1))(X)
X = tf.keras.layers.Dense(64,activation="relu",kernel_initializer=tf.keras.initializers.he_uniform(seed=45),kernel_regularizer=tf.keras.regularizers.l2(0.1))(X)
X = tf.keras.layers.Dense(32,activation="relu",kernel_initializer=tf.keras.initializers.he_uniform(seed=45),kernel_regularizer=tf.keras.regularizers.l2(0.1))(X)
# X = tf.keras.layers.Dense(16,activation="relu",kernel_initializer=tf.keras.initializers.he_uniform(seed=45),kernel_regularizer=tf.keras.regularizers.l2(0.1))(X)
output_layer = tf.keras.layers.Dense(10,activation='softmax', kernel_initializer=tf.keras.initializers.he_uniform(seed=45))(X)
model2 = tf.keras.Model(inputs = X_input,outputs = output_layer)
 

введите описание изображения здесь

Я хочу получать среднее значение на каждом временном шаге, а не на каждом блоке
Например, сейчас я получаю форму (None, 256), но я хочу получить форму (None, 64) из глобального среднего уровня объединения, что мне нужно для этого сделать.

Комментарии:

1. X = tf.reduce_mean(X, axis=-1) вместо tf.keras. слои. GlobalAvgPool1D()(X)

Ответ №1:

Я не уверен, что это самый эффективный способ, но вы можете попробовать это :

 X = tf.keras.layers.Reshape(target_shape=(64,256,1))(X)
X = tf.keras.layers.TimeDistributed(tf.keras.layers.GlobalAveragePooling1D())(X)
X = tf.keras.layers.Reshape(target_shape=(64,))(X)
 

вместо :

 X = tf.keras.layers.GlobalAvgPool1D()(X)
 

Теперь сводка :

 Model: "functional_13"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_14 (InputLayer)        [(None, 64, 35)]          0         
_________________________________________________________________
lstm_26 (LSTM)               (None, 64, 512)           1122304   
_________________________________________________________________
lstm_27 (LSTM)               (None, 64, 256)           787456    
_________________________________________________________________
reshape_2 (Reshape)          (None, 64, 256, 1)        0         
_________________________________________________________________
time_distributed_8 (TimeDist (None, 64, 1)             0         
_________________________________________________________________
reshape_3 (Reshape)          (None, 64)                0         
_________________________________________________________________
dense_61 (Dense)             (None, 128)               8320      
_________________________________________________________________
dense_62 (Dense)             (None, 64)                8256      
_________________________________________________________________
dense_63 (Dense)             (None, 32)                2080      
_________________________________________________________________
dense_64 (Dense)             (None, 10)                330       
=================================================================
Total params: 1,928,746
Trainable params: 1,928,746
Non-trainable params: 0