import tensorflow as tf

    self.assertFalse(task.teacher.params.is_eval)
    self.assertIsNotNone(task.teacher.params.input)
    self.assertFalse(task.student.params.is_eval)
    self.assertIsNotNone(task.student.params.input)
    metrics = task.FPropDefaultTheta()
    self.assertItemsEqual(['loss', 'num_samples_in_batch'],
                          list(metrics.keys()))
    task.BProp()
    # Expected side effects of BProp().
    self.assertIsNotNone(task.train_op)
    self.assertIsNotNone(task.total_examples)

    with self.session() as sess:
      tf.global_variables_initializer().run()

      variables = {}
      values_before_training = {}
      values_after_training = {}
      for child in ('teacher', 'student'):
        variables[child] = {
            k: v
            for k, v in getattr(task, child).vars.FlattenItems()
        }
        values_before_training[child] = sess.run(variables[child])

      # Train for a few steps.
