Настройка составного кодировщика BiLSTM в Keras - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу знать, правильно ли то, что я делаю. Я строю последовательность для последовательности кодера декодера сети для языкового перевода. Я сложил три слоя BLSTM в качестве кодера и один декодер LSTM. Это не выдает никаких ошибок, но просто чтобы быть уверенным.

inputs = Input(shape=(timesteps, features))

#Encoder
masked_encoder_inputs = layers.Masking(mask_value=0)(inputs)
encoder_dropout = (TimeDistributed(Dropout(rate = dropout_rate)))(masked_encoder_inputs)

encoder_out1,f_h1, f_c1, b_h1, b_c1 = Bidirectional(LSTM(latent_dim, return_sequences = True,return_state=True))(encoder_dropout)
state_h1 = Concatenate()([f_h1, b_h1])
state_c1 = Concatenate()([f_h1, b_c1])

encoder_out2,f_h2, f_c2, b_h2, b_c2 = Bidirectional(LSTM(latent_dim, return_sequences = True, return_state=True,dropout=0.3))(encoder_out1)
state_h2 = Concatenate()([f_h2, b_h2])
state_c2 = Concatenate()([f_h2, b_c2])

encoder_out3,f_h3, f_c3, b_h3, b_c3 = Bidirectional(LSTM(latent_dim, return_sequences = True, return_state=True,dropout= 0.3))(encoder_out2)
state_h3 = Concatenate()([f_h2, b_h2])
state_c3 = Concatenate()([f_h2, b_c2])

state_h = Concatenate()([state_h1,state_h2,state_h3])
state_c = Concatenate()([state_c1,state_c2,state_c3])

encoder_states = [state_h, state_c]

Эти состояния и конечный кодер выводят go в качестве начальных состояний в следующем декодере: -

#Decoder
decoder_inputs = (encoder_out3)
decoder_lstm = LSTM(latent_dim*6, return_state=True,return_sequences=True)
decoder_dropout = (TimeDistributed(Dropout(rate = dropout_rate)))(decoder_inputs)
decoder_outputs, _, _ = decoder_lstm(decoder_dropout, initial_state = encoder_states)

И, наконец, определяем модель: -

model = Model(inputs, decoder_outputs)

Ниже приведена блок-схема модели: - Encoder-Decoder FlowChart

...