Маскировка выхода декодера LSTM - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть сеть декодера для преобразования речи, с которой я борюсь. Я думаю, что успешно замаскировал вход энкодера. Мне было интересно, если есть способ замаскировать вывод декодера. (Также была бы очень полезна любая помощь с сетью кодировщика-декодера, я пробую прямую речь к переводу речи, используя спектрограммы, а не машинный перевод для переводов текста, мои входные данные - массив 2d numpy - спектрограммы). Вот мой код: -

timesteps = 128
features = 200
latent_dim = 256

num_encoder_tokens = features
num_decoder_tokens = features

#Encoder
encoder_inputs = Input(shape=(timesteps, features))
#Encoder Masking
masked_encoder_inputs = layers.Masking(mask_value=0.0)(encoder_inputs)

encoder_BLSTM = Bidirectional(LSTM(latent_dim, return_state=True))
encoder_outputs,f_hidden_state, f_cell_state, b_hidden_state, b_cell_state = encoder_BLSTM(masked_encoder_inputs)
#Encoder output is discarded

#Concatenate forward and backward for both hidden and cell states
state_h = Concatenate()([f_hidden_state, b_hidden_state])
state_c = Concatenate()([f_cell_state, b_cell_state])

#Encoder States
encoder_states = [state_h, state_c]

#Decoder
decoder_inputs = Input(shape=(timesteps, num_decoder_tokens))
#Decoder input is masked
masked_decoder_inputs = layers.Masking(mask_value=0.0)(decoder_inputs)

decoder_lstm = LSTM(latent_dim*2, return_state=True,return_sequences=True)
decoder_outputs, _, _ = decoder_lstm(masked_decoder_inputs, initial_state=encoder_states)

# Use a softmax to generate a probability distribution over the target vocabulary for each time step

decoder_dense = Dense(num_decoder_tokens, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)

# Define the model that will turn `encoder_input_data` & `decoder_input_data` into `decoder_target_data`
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
...