code: def linear(self, x):
      
      with tf.name_scope("presoftmax_linear"):
        batch_size = tf.shape(x)[0]
        length = tf.shape(x)[1]
  
        x = tf.reshape(x, [-1, self.hidden_size])
        logits = tf.matmul(x, self.shared_weights, transpose_b=True)
  
        return tf.reshape(logits, [batch_size, length, self.vocab_size])
docs: Computes logits by running x through a linear layer.
  
      Args:
        x: A float32 tensor with shape [batch_size, length, hidden_size]
      Returns:
        float32 tensor with shape [batch_size, length, vocab_size].