'Create the training architecture and the last layer of the LSTM.'

def _create_rnn_architecture(self):

    self.inputs = [tf.squeeze(i, [1]) for i in tf.split(axis=1, num_or_size_splits=self.num_steps, value=self.inputs)]
    (outputs, state) = tf.nn.rnn(self.cell, self.inputs, initial_state=self._init_state)
    output = tf.reshape(tf.concat(axis=1, values=outputs), [(-1), self.num_hidden])
    softmax_w = tf.get_variable('softmax_w', [self.num_hidden, self.vocab_size])
    softmax_b = tf.get_variable('softmax_b', [self.vocab_size])
    logits = tf.add(tf.matmul(output, softmax_w), softmax_b)
    loss = tf.nn.seq2seq.sequence_loss_by_example([logits], [tf.reshape(self.input_labels, [(-1)])], [tf.ones([(self.batch_size * self.num_steps)])])
    self.cost = tf.div(tf.reduce_sum(loss), self.batch_size)
    self.final_state = state
