code: 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
docs: Create the training architecture and the last layer of the LSTM.