import tensorflow as tf

        )
        training_decoder_output, _, _ = tf.contrib.seq2seq.dynamic_decode(
            decoder=training_decoder,
            impute_finished=True,
            maximum_iterations=tf.reduce_max(seq_lens),
        )

        self.Y_hat = training_decoder_output.rnn_output
        out_decoder2 = tf.reshape(self.Y_hat, [tf.shape(self.Y_hat)[0], -1, n_mels])
        dec = conv1d_banks(out_decoder2, K=decoder_num_banks, is_training=self.training)
        dec = tf.layers.max_pooling1d(dec, pool_size=2, strides=1, padding="same")
        dec = tf.layers.conv1d(dec, embed_size // 2, 3, name="decoder-conv1-1", padding="SAME")
        dec = tf.nn.relu(tf.layers.batch_normalization(dec, training=self.training))
        dec = tf.layers.conv1d(dec, embed_size // 2, 3, name="decoder-conv1-2", padding="SAME")
        dec = tf.layers.batch_normalization(dec, training=self.training)
        dec = tf.layers.dense(dec, embed_size // 2)
        for i in range(4):
            dec = highwaynet(
                dec, num_units=embed_size // 2, scope="decoder-highwaynet-{}".format(i)
            )
        with tf.variable_scope("decoder-gru", reuse=False):
            cell = tf.contrib.rnn.GRUCell(embed_size // 2)
            cell_bw = tf.contrib.rnn.GRUCell(embed_size // 2)
            outputs, _ = tf.nn.bidirectional_dynamic_rnn(cell, cell_bw, dec, dtype=tf.float32)
            outputs = tf.concat(outputs, 2)
        self.Z_hat = tf.layers.dense(outputs, 1 + fourier_window_size // 2)
