code: def read(self, x):
      
      access_logits = self._address_content(x)
      weights = tf.nn.softmax(access_logits)
      retrieved_mem = tf.reduce_sum(
          tf.multiply(tf.expand_dims(weights, 3),
                      tf.expand_dims(self.mem_vals, axis=1)), axis=2)
      return access_logits, retrieved_mem
docs: Read from the memory.
  
      An external component can use the results via a simple MLP,
      e.g., fn(x W_x + retrieved_mem W_m).
  
      Args:
        x: a tensor in the shape of [batch_size, length, depth].
      Returns:
        access_logits: the logits for accessing the memory in shape of
            [batch_size, length, memory_size].
        retrieved_mem: the retrieved results in the shape of
            [batch_size, length, val_depth].