code: def dropout(x, keep_prob, noise_shape=None, name=None):
    
    noise_shape = convert_to_shape(noise_shape)
    if noise_shape is None:
      noise_shape = x.shape
    with tf.variable_scope(name, default_name="dropout"):
      if keep_prob == 1.0:
        return x
      noise = cast(less(random_uniform(
          x.mesh, noise_shape, dtype=x.dtype), keep_prob), x.dtype)
      noise /= keep_prob
      return x * noise
docs: Dropout layer.
  
    Args:
      x: a Tensor
      keep_prob: a float between 0.0 and 1.0
      noise_shape: an optional Shape (a subset of x.shape)
      name: an optional string
  
    Returns:
      a Tensor