def test_create_adversarial_reweighting_estimator_without_demographics(self):
   config = tf.estimator.RunConfig(model_dir=self.model_dir,
                                   save_checkpoints_steps=2)
   feature_columns, _, _, label_column_name = self.load_dataset.get_feature_columns(include_sensitive_columns=False)  # pylint: disable=line-too-long
   estimator = adversarial_reweighting_model.get_estimator(
       feature_columns=feature_columns,
       label_column_name=label_column_name,
       config=config,
       model_dir=self.model_dir,
       primary_hidden_units=self.primary_hidden_units,
       batch_size=self.batch_size,
       pretrain_steps=self.pretrain_steps,
       primary_learning_rate=0.01,
       adversary_learning_rate=0.01,
       optimizer='Adagrad',
       activation=tf.nn.relu,
       adversary_loss_type='ce_loss',
       adversary_include_label=True,
       upweight_positive_instance_only=False)
   self.assertIsInstance(estimator, tf.estimator.Estimator)
 def _get_estimator(self):
   config = tf.estimator.RunConfig(model_dir=self.model_dir,
                                   save_checkpoints_steps=1)
   feature_columns, _, _, label_column_name = (
       self.load_dataset.get_feature_columns(include_sensitive_columns=True))
   estimator = adversarial_reweighting_model.get_estimator(
       feature_columns=feature_columns,
       label_column_name=label_column_name,
       config=config,
       model_dir=self.model_dir,
       primary_hidden_units=self.primary_hidden_units,
       batch_size=self.batch_size,
       pretrain_steps=self.pretrain_steps,
       primary_learning_rate=0.01,
       adversary_learning_rate=0.01,
       optimizer='Adagrad',
       activation=tf.nn.relu,
       adversary_loss_type='ce_loss',
       adversary_include_label=True,
       upweight_positive_instance_only=False)
   return estimator
 def test_global_steps_adversarial_reweighting_model(self):
   config = tf.estimator.RunConfig(model_dir=self.model_dir,
                                   save_checkpoints_steps=2)
   feature_columns, _, _, label_column_name = self.load_dataset.get_feature_columns(include_sensitive_columns=True)  # pylint: disable=line-too-long
   estimator = adversarial_reweighting_model.get_estimator(
       feature_columns=feature_columns,
       label_column_name=label_column_name,
       config=config,
       model_dir=self.model_dir,
       primary_hidden_units=self.primary_hidden_units,
       batch_size=self.batch_size,
       pretrain_steps=self.pretrain_steps)
   self.assertIsInstance(estimator, tf.estimator.Estimator)
   train_input_fn, test_input_fn = self._get_train_test_input_fn()
   estimator.train(input_fn=train_input_fn, steps=self.train_steps)
   eval_results = estimator.evaluate(input_fn=test_input_fn,
                                     steps=self.test_steps)
   # Checks if global step has reached specified number of train_steps
   # # As a artifact of the way train_ops is defined in
   # _AdversarialReweightingEstimator.
   # # Training stops two steps after the specified number of train_steps.
   self.assertIn('global_step', eval_results)
   self.assertEqual(eval_results['global_step'], self.train_steps+2)
 def test_eval_results_adversarial_reweighting_model(self):
   config = tf.estimator.RunConfig(model_dir=self.model_dir,
                                   save_checkpoints_steps=2)
   feature_columns, _, _, label_column_name = self.load_dataset.get_feature_columns(include_sensitive_columns=True)  # pylint: disable=line-too-long
   estimator = adversarial_reweighting_model.get_estimator(
       feature_columns=feature_columns,
       label_column_name=label_column_name,
       config=config,
       model_dir=self.model_dir,
       primary_hidden_units=self.primary_hidden_units,
       batch_size=self.batch_size,
       pretrain_steps=self.pretrain_steps)
   self.assertIsInstance(estimator, tf.estimator.Estimator)
   train_input_fn, test_input_fn = self._get_train_test_input_fn()
   estimator.train(input_fn=train_input_fn, steps=self.train_steps)
   eval_results = estimator.evaluate(input_fn=test_input_fn,
                                     steps=self.test_steps)
   self.assertNotEmpty(eval_results)
   # # Checks if all tp,tn,fp,fn keys are present in eval_results dictionary
   self.assertIn('auc', eval_results)
   self.assertIn('fp', eval_results)
   self.assertIn('fn', eval_results)
   self.assertIn('tp', eval_results)
   self.assertIn('tn', eval_results)
Пример #5
0
def get_estimator(model_dir, model_name, feature_columns, label_column_name):
    """Instantiates and returns a model estimator.

  Args:
    model_dir: Directory to save model parameters, graph and etc. This can
        also be used to load checkpoints from the directory into an estimator
        to continue training a previously saved model.
    model_name: (string) name of the estimator to instantiate.
    feature_columns: list of feature_columns.
    label_column_name: (string) name of the target variable.

  Returns:
    An instance of `tf.estimator.Estimator'.

  Raises:
    ValueError: if estimator for model_name is not implemented.
    ValueError: if activation function is not implemented.
  """
    # Defines activation function to be used for the model. Append activation
    # functions that we want to use here.
    if FLAGS.activation == "relu":
        activation_fn = tf.nn.relu
    elif FLAGS.activation == "linear":
        activation_fn = tf.nn.linear
    else:
        raise ValueError("Activation {} is not supported.".format(
            FLAGS.activation))

    kwargs = {
        "feature_columns":
        feature_columns,
        "label_column_name":
        label_column_name,
        "config":
        tf.estimator.RunConfig(
            model_dir=model_dir,
            save_checkpoints_steps=FLAGS.min_eval_frequency),
        "model_dir":
        model_dir,
        "batch_size":
        FLAGS.batch_size,
        "activation":
        activation_fn,
        "optimizer":
        FLAGS.optimizer
    }

    # Instantiates estimators to be used. Append new estimators that we want to use here.
    if model_name == "baseline":
        estimator = baseline_model.get_estimator(
            hidden_units=FLAGS.primary_hidden_units,
            learning_rate=FLAGS.primary_learning_rate,
            **kwargs)
    elif model_name == "inverse_propensity_weighting":
        estimator = ips_reweighting_model.get_estimator(
            reweighting_type=FLAGS.reweighting_type,
            hidden_units=FLAGS.primary_hidden_units,
            learning_rate=FLAGS.primary_learning_rate,
            **kwargs)
    elif model_name == "adversarial_reweighting":
        estimator = adversarial_reweighting_model.get_estimator(
            adversary_loss_type=FLAGS.adversary_loss_type,
            adversary_include_label=FLAGS.adversary_include_label,
            upweight_positive_instance_only=FLAGS.
            upweight_positive_instance_only,
            pretrain_steps=FLAGS.pretrain_steps,
            primary_hidden_units=FLAGS.primary_hidden_units,
            adversary_hidden_units=FLAGS.adversary_hidden_units,
            primary_learning_rate=FLAGS.primary_learning_rate,
            adversary_learning_rate=FLAGS.adversary_learning_rate,
            **kwargs)
    else:
        raise ValueError("Model {} is not implemented.".format(model_name))
    return estimator