code: def Dropout(x, *args, **kwargs):
      
      if 'is_training' in kwargs:
          kwargs['training'] = kwargs.pop('is_training')
      if len(args) > 0:
          if args[0] != 0.5:
              logger.warn(
                  "The first positional argument to tensorpack.Dropout is the probability to keep, rather than to drop. "
                  "This is different from the rate argument in tf.layers.Dropout due to historical reasons. "
                  "To mimic tf.layers.Dropout, explicitly use keyword argument 'rate' instead")
          rate = 1 - args[0]
      elif 'keep_prob' in kwargs:
          assert 'rate' not in kwargs, "Cannot set both keep_prob and rate!"
          rate = 1 - kwargs.pop('keep_prob')
      elif 'rate' in kwargs:
          rate = kwargs.pop('rate')
      else:
          rate = 0.5
  
      if kwargs.get('training', None) is None:
          kwargs['training'] = get_current_tower_context().is_training
  
      if get_tf_version_tuple() <= (1, 12):
          return tf.layers.dropout(x, rate=rate, **kwargs)
      else:
          return tf.nn.dropout(x, rate=rate if kwargs['training'] else 0.)
docs: Same as `tf.layers.dropout`.
      However, for historical reasons, the first positional argument is
      interpreted as keep_prob rather than drop_prob.
      Explicitly use `rate=` keyword arguments to ensure things are consistent.