def _build_encoded_sequences(self, sequences, length, mode, hparams): num_bi_layers = 1 num_uni_layers = hparams.enc_num_layers - num_bi_layers # Build bidirectional layers. bi_outputs, bi_state = model_utils.build_bidirectional_rnn( sequences=sequences, length=length, num_layers=num_bi_layers, num_residual_layers=0, # no residual connection num_units=hparams.hidden_size, unit_type=hparams.rnn_unit_type, forget_bias=hparams.rnn_forget_bias, dropout=hparams.dropout, mode=mode) # Build unidirectional layers. outputs, state = model_utils.build_unidirectional_rnn( sequences=bi_outputs, length=length, num_layers=num_uni_layers, num_residual_layers=hparams.enc_num_residual_layers, num_units=hparams.hidden_size, unit_type=hparams.rnn_unit_type, forget_bias=hparams.rnn_forget_bias, dropout=hparams.dropout, mode=mode) # Pass all encoder states to the decoder except the first in the bi-layer. state = (bi_state[1], ) + ((state, ) if num_uni_layers == 1 else state) return outputs, state
def _build_encoded_sequences(self, sequences, length, mode, hparams): """Build sequences of encoded vectors.""" outputs, (final_states_fw, final_states_bw) = (model_utils.build_bidirectional_rnn( sequences=sequences, length=length, unit_type=hparams.rnn_unit_type, num_layers=hparams.enc_num_layers, num_residual_layers=hparams.enc_num_residual_layers, num_units=hparams.hidden_size, forget_bias=hparams.rnn_forget_bias, dropout=hparams.dropout, mode=mode)) # Concatenate forward and backward states. if hparams.enc_num_layers > 1: concat_state = [] for layer_id in range(hparams.enc_num_layers): concat_state.append(final_states_fw[layer_id]) # forward concat_state.append(final_states_bw[layer_id]) # backward final_state = tuple(concat_state) return outputs, final_state