У меня есть сеть декодера для преобразования речи, с которой я борюсь. Я думаю, что успешно замаскировал вход энкодера. Мне было интересно, если есть способ замаскировать вывод декодера. (Также была бы очень полезна любая помощь с сетью кодировщика-декодера, я пробую прямую речь к переводу речи, используя спектрограммы, а не машинный перевод для переводов текста, мои входные данные - массив 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)