Commit a7fca56e authored by Bharath Ramsundar's avatar Bharath Ramsundar
Browse files

Dropout fix and debugging

parent 9ab2ac00
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ class Metric(object):
  """Wrapper class for computing user-defined metrics."""

  def __init__(self, metric, task_averager=None, name=None, threshold=None,
               verbosity=None, mode=None, compute_energy_metric=False):
               verbosity="high", mode=None, compute_energy_metric=False):
    """
    Args:
      metric: function that takes args y_true, y_pred (in that order) and
@@ -127,10 +127,12 @@ class Metric(object):
    self.verbosity = verbosity
    self.threshold = threshold
    if mode is None:
      if self.metric.__name__ in ["roc_auc_score", "matthews_corrcoef", "recall_score",
                       "accuracy_score", "kappa_score", "precision_score"]:
      if self.metric.__name__ in ["roc_auc_score", "matthews_corrcoef",
                                  "recall_score", "accuracy_score",
                                  "kappa_score", "precision_score"]:
        mode = "classification"
      elif self.metric.__name__ in ["pearson_r2_score", "r2_score", "mean_squared_error",
      elif self.metric.__name__ in ["pearson_r2_score", "r2_score",
                                    "mean_squared_error",
                                    "mean_absolute_error", "rms_score",
                                    "mae_score"]:
        mode = "regression"
+11 −1
Original line number Diff line number Diff line
@@ -162,8 +162,18 @@ class Model(object):
    """
    y_preds = []
    n_tasks = self.get_num_tasks()
    for (X_batch, y_batch, w_batch, ids_batch) in dataset.iterbatches(
    #################################################################### DEBUG
    #for (X_batch, y_batch, w_batch, ids_batch) in dataset.iterbatches(
    ind = 0
    for (X_batch, _, _, ids_batch) in dataset.iterbatches(
    #################################################################### DEBUG
        batch_size, deterministic=True):
      #################################################################### DEBUG
      if ind == 0:
        print("ids_batch[0]")
        print(ids_batch[0])
      ind += 1
      #################################################################### DEBUG
      n_samples = len(X_batch)
      y_pred_batch = self.predict_on_batch(X_batch, pad_batch=pad_batches)
      # Discard any padded predictions
+5 −26
Original line number Diff line number Diff line
@@ -243,7 +243,7 @@ class TensorflowGraphModel(Model):

      return loss 

  def fit(self, dataset, nb_epoch=10, pad_batches=False, shuffle=False,
  def fit(self, dataset, nb_epoch=10, pad_batches=False, 
          max_checkpoints_to_keep=5, log_every_N_batches=50, **kwargs):
    """Fit the model.

@@ -258,9 +258,6 @@ class TensorflowGraphModel(Model):
    ############################################################## TIMING
    time1 = time.time()
    ############################################################## TIMING
    n_datapoints = len(dataset)
    batch_size = self.batch_size
    step_per_epoch = np.ceil(float(n_datapoints)/batch_size)
    log("Training for %d epochs" % nb_epoch, self.verbosity)
    with self.train_graph.graph.as_default():
      train_op = self.get_training_op(
@@ -272,14 +269,11 @@ class TensorflowGraphModel(Model):
        saver.save(sess, self._save_path, global_step=0)
        for epoch in range(nb_epoch):
          avg_loss, n_batches = 0., 0
          if shuffle:
            log("About to shuffle dataset before epoch start.", self.verbosity)
            dataset.shuffle()
          for ind, (X_b, y_b, w_b, ids_b) in enumerate(
              ############################################################ DEBUG
              ## hardcode pad_batches=True to work around limitations in Tensorflow
              #dataset.iterbatches(batch_size, pad_batches=True)):
              dataset.iterbatches(batch_size, pad_batches=False)):
              dataset.iterbatches(self.batch_size, pad_batches=pad_batches)):
              #dataset.iterbatches(batch_size, pad_batches=pad_batches)):
              ############################################################ DEBUG
            if ind % log_every_N_batches == 0:
@@ -288,9 +282,7 @@ class TensorflowGraphModel(Model):
            feed_dict = self.construct_feed_dict(X_b, y_b, w_b, ids_b)
            fetches = self.train_graph.output + [
                train_op, self.train_graph.loss]
            fetched_values = sess.run(
                fetches,
                feed_dict=feed_dict)
            fetched_values = sess.run(fetches, feed_dict=feed_dict)
            output = fetched_values[:len(self.train_graph.output)]
            loss = fetched_values[-1]
            avg_loss += loss
@@ -419,7 +411,6 @@ class TensorflowGraphModel(Model):
      return
    with self.eval_graph.graph.as_default():
      last_checkpoint = self._find_last_checkpoint()

      # TODO(rbharath): Is setting train=False right here?
      saver = tf.train.Saver()
      saver.restore(self._get_shared_session(train=False),
@@ -448,13 +439,7 @@ class TensorflowClassifier(TensorflowGraphModel):
  Subclasses must set the following attributes:
    output: logits op(s) used for computing classification loss and predicted
      class probabilities for each task.

  Class attributes:
    default_metrics: List of metrics to compute by default.
  """

  default_metrics = ['auc']

  def get_task_type(self):
    return "classification"

@@ -603,13 +588,7 @@ class TensorflowRegressor(TensorflowGraphModel):
  Subclasses must set the following attributes:
    output: Op(s) used for computing regression loss and predicted regression
      outputs for each task.

  Class attributes:
    default_metrics: List of metrics to compute by default.
  """

  default_metrics = ['r2']

  def get_task_type(self):
    return "regressor"

@@ -677,7 +656,7 @@ class TensorflowRegressor(TensorflowGraphModel):
    
    if not self._restored_model:
      self.restore()
    with self.train_graph.graph.as_default():
    with self.eval_graph.graph.as_default():

      # run eval data through the model
      n_tasks = self.n_tasks
+1 −1
Original line number Diff line number Diff line
@@ -142,7 +142,7 @@ class TensorflowMultiTaskRegressor(TensorflowRegressor):
                stddev=weight_init_stddevs[i]),
            bias_init=tf.constant(value=bias_init_consts[i],
                                  shape=[layer_sizes[i]])))
        layer = model_ops.dropout(layer, dropouts[i])
        layer = model_ops.dropout(layer, dropouts[i], training)
        prev_layer = layer
        prev_layer_size = layer_sizes[i]

+40 −6
Original line number Diff line number Diff line
@@ -35,8 +35,11 @@ class Evaluator(object):
  def __init__(self, model, dataset, transformers, verbosity=False):
    self.model = model
    self.dataset = dataset
    self.output_transformers = [
        transformer for transformer in transformers if transformer.transform_y]
    ########################################################## DEBUG
    #self.output_transformers = [
    #    transformer for transformer in transformers if transformer.transform_y]
    self.transformers = transformers
    ########################################################## DEBUG
    self.task_names = dataset.get_task_names()
    self.verbosity = verbosity

@@ -71,19 +74,50 @@ class Evaluator(object):
    Computes statistics of model on test data and saves results to csv.
    """
    y = self.dataset.y
    y = undo_transforms(y, self.output_transformers)
    ################################################################ DEBUG
    #print("self.output_transformers")
    #print(self.output_transformers)
    ################################################################ DEBUG
    ################################################################ DEBUG
    #y = undo_transforms(y, self.output_transformers)
    y = undo_transforms(y, self.transformers)
    ################################################################ DEBUG
    w = self.dataset.w

    if not len(metrics):
      return {}
    else:
      mode = metrics[0].mode
    ################################################################ DEBUG
    print("mode")
    print(mode)
    ################################################################ DEBUG
    if mode == "classification":
      y_pred = self.model.predict_proba(self.dataset, self.output_transformers)
      ################################################################ DEBUG
      #y_pred = self.model.predict_proba(self.dataset, self.output_transformers)
      #y_pred_print = self.model.predict(
      #    self.dataset, self.output_transformers).astype(int)
      y_pred = self.model.predict_proba(self.dataset, self.transformers)
      y_pred_print = self.model.predict(
          self.dataset, self.output_transformers).astype(int)
          self.dataset, self.transformers).astype(int)
      ################################################################ DEBUG
    else:
      y_pred = self.model.predict(self.dataset, self.output_transformers)
      ################################################################ DEBUG
      #y_pred = self.model.predict(self.dataset, self.output_transformers)
      y_pred = self.model.predict(self.dataset, self.transformers)
      ################################################################ DEBUG
      ################################################################ DEBUG
      print("y_pred.shape")
      print(y_pred.shape)
      print("y_pred[:1]")
      print(y_pred[:1])
      print("y[:1]")
      print(y[:1])
      raw_y = self.model.predict_on_batch(self.dataset.X[:1])
      raw_y = undo_transforms(raw_y, self.transformers)
      print("raw_y")
      print(raw_y)
      ################################################################ DEBUG
      y_pred_print = y_pred
    multitask_scores = {}

Loading