def testMultiLabelTwoClasses(self):
   n_classes = 2
   labels = ((0, 1),)
   logits = ((1., 0.),)
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         {}, model_fn.ModeKeys.TRAIN, labels=labels,
         train_op_fn=_noop_train_op, logits=logits)
     self._assert_output_alternatives(model_fn_ops)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = 1.00320443
     _assert_metrics(self, expected_loss, {
         "accuracy": 0.,
         "auc": 0.,
         "loss": expected_loss,
         "auc/class0": 1.,
         "auc/class1": 0.,
         "labels/actual_label_mean/class0": labels[0][0],
         "labels/actual_label_mean/class1": labels[0][1],
         "labels/logits_mean/class0": logits[0][0],
         "labels/logits_mean/class1": logits[0][1],
         "labels/prediction_mean/class0": logits[0][0],
         "labels/prediction_mean/class1": logits[0][1],
         "labels/probability_mean/class0": _sigmoid(logits[0][0]),
         "labels/probability_mean/class1": _sigmoid(logits[0][1]),
     }, model_fn_ops)
Exemple #2
0
 def testMultiLabelWithInvalidLogits(self):
   head = head_lib._multi_label_head(n_classes=len(self._labels[0]) + 1)
   with ops.Graph().as_default(), session.Session():
     with self.assertRaisesRegexp(ValueError, "Dimensions.*not compatible"):
       head.create_model_fn_ops(
           {}, self._labels, model_fn.ModeKeys.TRAIN, _noop_train_op,
           logits=self._logits)
Exemple #3
0
 def testMultiLabel(self):
     head = head_lib._multi_label_head(n_classes=3)
     with tf.Graph().as_default(), tf.Session() as sess:
         logits = tf.constant([[1.0, 0.0, 0.0]])
         labels = tf.constant([[0, 0, 1]])
         model_fn_ops = head.head_ops({}, labels, tf.contrib.learn.ModeKeys.TRAIN, _noop_train_op, logits=logits)
         self.assertAlmostEqual(0.89985204, sess.run(model_fn_ops.loss))
Exemple #4
0
 def testMultiLabelWithLogitsInput(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         {}, self._labels, model_fn.ModeKeys.TRAIN, _noop_train_op,
         logits_input=((0., 0.),))
     w = ("logits/weights:0", "logits/biases:0")
     _assert_variables(
         self, expected_global=w, expected_model=w, expected_trainable=w)
     variables.global_variables_initializer().run()
     _assert_summary_tags(self, ["loss"])
     expected_loss = .69314718
     _assert_metrics(self, expected_loss, {
         "accuracy": 2. / 3,
         "auc": 2. / 4,
         "loss": expected_loss,
         "auc/class0": 1.,
         "auc/class1": 1.,
         "auc/class2": 0.,
         "labels/actual_label_mean/class0": self._labels[0][0],
         "labels/actual_label_mean/class1": self._labels[0][1],
         "labels/actual_label_mean/class2": self._labels[0][2],
         "labels/logits_mean/class0": 0.,
         "labels/logits_mean/class1": 0.,
         "labels/logits_mean/class2": 0.,
         "labels/prediction_mean/class0": 0.,
         "labels/prediction_mean/class1": 0.,
         "labels/prediction_mean/class2": 0.,
         "labels/probability_mean/class0": .5,
         "labels/probability_mean/class1": .5,
         "labels/probability_mean/class2": .5,
     }, model_fn_ops)
Exemple #5
0
 def testMultiLabelWithCenteredBias(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes,
       enable_centered_bias=True,
       metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         {}, model_fn.ModeKeys.TRAIN, self._labels, _noop_train_op,
         logits=self._logits)
     self._assert_output_alternatives(model_fn_ops)
     _assert_variables(
         self,
         expected_global=(
             "multi_class_head/centered_bias_weight:0",
             ("multi_class_head/multi_class_head/centered_bias_weight/"
              "Adagrad:0"),),
         expected_trainable=("multi_class_head/centered_bias_weight:0",))
     variables.global_variables_initializer().run()
     _assert_summary_tags(self, (
         "loss",
         "multi_class_head/centered_bias/bias_0",
         "multi_class_head/centered_bias/bias_1",
         "multi_class_head/centered_bias/bias_2"
     ))
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #6
0
 def testMultiLabelWithInvalidLogits(self):
   head = head_lib._multi_label_head(n_classes=len(self._labels[0]) + 1)
   with ops.Graph().as_default(), session.Session():
     with self.assertRaisesRegexp(ValueError, "Dimensions.*not compatible"):
       head.create_model_fn_ops(
           {}, model_fn.ModeKeys.TRAIN, self._labels, _noop_train_op,
           logits=self._logits)
Exemple #7
0
 def testMultiLabelWithCenteredBias(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes,
       enable_centered_bias=True,
       metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         {}, model_fn.ModeKeys.TRAIN, self._labels, _noop_train_op,
         logits=self._logits)
     self._assert_output_alternatives(model_fn_ops)
     _assert_variables(
         self,
         expected_global=(
             "multi_class_head/centered_bias_weight:0",
             ("multi_class_head/multi_class_head/centered_bias_weight/"
              "Adagrad:0"),),
         expected_trainable=("multi_class_head/centered_bias_weight:0",))
     variables.global_variables_initializer().run()
     _assert_summary_tags(self, (
         "loss",
         "multi_class_head/centered_bias/bias_0",
         "multi_class_head/centered_bias/bias_1",
         "multi_class_head/centered_bias/bias_2"
     ))
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #8
0
 def testMultiLabelWithCenteredBias(self):
     n_classes = 3
     head = head_lib._multi_label_head(n_classes=n_classes,
                                       enable_centered_bias=True,
                                       metric_class_ids=range(n_classes))
     with ops.Graph().as_default(), session.Session():
         logits = constant_op.constant([[1., 0., 0.]])
         labels = constant_op.constant([[0, 0, 1]])
         model_fn_ops = head.head_ops({},
                                      labels,
                                      model_fn.ModeKeys.TRAIN,
                                      _noop_train_op,
                                      logits=logits)
         _assert_variables(self,
                           expected_global=(
                               "centered_bias_weight:0",
                               "centered_bias_weight/Adagrad:0",
                           ),
                           expected_trainable=("centered_bias_weight:0", ))
         variables.global_variables_initializer().run()
         _assert_summary_tags(self, [
             "loss", "centered_bias/bias_0", "centered_bias/bias_1",
             "centered_bias/bias_2"
         ])
         expected_loss = .89985204
         _assert_metrics(self, expected_loss,
                         self._expected_eval_metrics(expected_loss),
                         model_fn_ops)
 def testMultiLabelWithCenteredBias(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, enable_centered_bias=True,
       metric_class_ids=range(n_classes))
   with tf.Graph().as_default(), tf.Session():
     logits = tf.constant([[1., 0., 0.]])
     labels = tf.constant([[0, 0, 1]])
     model_fn_ops = head.head_ops({}, labels,
                                  tf.contrib.learn.ModeKeys.TRAIN,
                                  _noop_train_op, logits=logits)
     _assert_variables(self, expected_global=(
         "centered_bias_weight:0",
         "centered_bias_weight/Adagrad:0",
     ), expected_trainable=(
         "centered_bias_weight:0",
     ))
     tf.global_variables_initializer().run()
     _assert_summary_tags(self, ["loss",
                                 "centered_bias/bias_0",
                                 "centered_bias/bias_1",
                                 "centered_bias/bias_2"])
     expected_loss = .89985204
     _assert_metrics(
         self, expected_loss, self._expected_eval_metrics(expected_loss),
         model_fn_ops)
Exemple #10
0
 def testMultiLabel(self):
   head = head_lib._multi_label_head(n_classes=3)
   with tf.Graph().as_default(), tf.Session() as sess:
     logits = tf.constant([[1., 0., 0.]])
     labels = tf.constant([[0, 0, 1]])
     model_fn_ops = head.head_ops({}, labels,
                                  tf.contrib.learn.ModeKeys.TRAIN,
                                  _noop_train_op, logits=logits)
     self.assertAlmostEqual(0.89985204, sess.run(model_fn_ops.loss))
Exemple #11
0
 def testMultiLabelWithLogitsAndLogitsInput(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     with self.assertRaisesRegexp(
         ValueError, "Both logits and logits_input supplied"):
       head.create_model_fn_ops(
           {}, self._labels, model_fn.ModeKeys.TRAIN, _noop_train_op,
           logits_input=((0., 0.),), logits=self._logits)
Exemple #12
0
 def testMultiLabelWithWeight(self):
     head = head_lib._multi_label_head(n_classes=3, weight_column_name="label_weight")
     with tf.Graph().as_default(), tf.Session() as sess:
         features = {"label_weight": tf.constant([0.1])}
         logits = tf.constant([[1.0, 0.0, 0.0]])
         labels = tf.constant([[0, 0, 1]])
         model_fn_ops = head.head_ops(
             features, labels, tf.contrib.learn.ModeKeys.TRAIN, _noop_train_op, logits=logits
         )
         self.assertAlmostEqual(0.089985214, sess.run(model_fn_ops.loss))
Exemple #13
0
 def testMultiLabelWithLogitsAndLogitsInput(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     with self.assertRaisesRegexp(
         ValueError, "Both logits and logits_input supplied"):
       head.create_model_fn_ops(
           {}, model_fn.ModeKeys.TRAIN, self._labels, _noop_train_op,
           logits_input=((0., 0.),), logits=self._logits)
Exemple #14
0
 def testMultiLabelWithWeight(self):
   head = head_lib._multi_label_head(
       n_classes=3, weight_column_name="label_weight")
   with tf.Graph().as_default(), tf.Session() as sess:
     features = {"label_weight": tf.constant([0.1])}
     logits = tf.constant([[1., 0., 0.]])
     labels = tf.constant([[0, 0, 1]])
     model_fn_ops = head.head_ops(features, labels,
                                  tf.contrib.learn.ModeKeys.TRAIN,
                                  _noop_train_op, logits=logits)
     self.assertAlmostEqual(0.089985214, sess.run(model_fn_ops.loss))
Exemple #15
0
 def testMultiLabelWithLogits(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         {}, self._labels, model_fn.ModeKeys.TRAIN, _noop_train_op,
         logits=self._logits)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #16
0
 def testMultiLabelEvalMode(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         {}, model_fn.ModeKeys.EVAL, self._labels, _noop_train_op,
         logits=self._logits)
     self._assert_output_alternatives(model_fn_ops)
     self.assertIsNone(model_fn_ops.train_op)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #17
0
 def testMultiLabel(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with tf.Graph().as_default(), tf.Session():
     logits = tf.constant(self._logits)
     labels = tf.constant(self._labels)
     model_fn_ops = head.head_ops({}, labels,
                                  tf.contrib.learn.ModeKeys.TRAIN,
                                  _noop_train_op, logits=logits)
     _assert_no_variables(self)
     expected_loss = .89985204
     _assert_metrics(
         self, expected_loss, self._expected_eval_metrics(expected_loss),
         model_fn_ops)
Exemple #18
0
 def testMultiLabelEvalMode(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     logits = constant_op.constant([[1., 0., 0.]])
     labels = constant_op.constant([[0, 0, 1]])
     model_fn_ops = head.head_ops(
         {}, labels, model_fn.ModeKeys.EVAL, _noop_train_op, logits=logits)
     self.assertIsNone(model_fn_ops.train_op)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #19
0
 def testMultiLabelEvalMode(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         {}, model_fn.ModeKeys.EVAL, self._labels, _noop_train_op,
         logits=self._logits)
     self._assert_output_alternatives(model_fn_ops)
     self.assertIsNone(model_fn_ops.train_op)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #20
0
 def testMultiLabelWithWeight(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, weight_column_name="label_weight",
       metric_class_ids=range(n_classes))
   with tf.Graph().as_default(), tf.Session():
     features = {"label_weight": tf.constant([.1])}
     logits = tf.constant([[1., 0., 0.]])
     labels = tf.constant([[0, 0, 1]])
     model_fn_ops = head.head_ops(features, labels,
                                  tf.contrib.learn.ModeKeys.TRAIN,
                                  _noop_train_op, logits=logits)
     _assert_no_variables(self)
     _assert_metrics(
         self, .089985214, self._expected_eval_metrics(2.69956),
         model_fn_ops)
Exemple #21
0
 def testMultiLabelWithCenteredBias(self):
   head = head_lib._multi_label_head(n_classes=3, enable_centered_bias=True)
   with tf.Graph().as_default(), tf.Session() as sess:
     logits = tf.constant([[1., 0., 0.]])
     labels = tf.constant([[0, 0, 1]])
     model_fn_ops = head.head_ops({}, labels,
                                  tf.contrib.learn.ModeKeys.TRAIN,
                                  _noop_train_op, logits=logits)
     self._assert_metrics(model_fn_ops)
     _assert_variables(self, expected_global=(
         "centered_bias_weight:0",
         "centered_bias_weight/Adagrad:0",
     ), expected_trainable=(
         "centered_bias_weight:0",
     ))
     tf.global_variables_initializer().run()
     self.assertAlmostEqual(0.89985204, sess.run(model_fn_ops.loss))
Exemple #22
0
 def testMultiLabelWithLabelName(self):
   n_classes = 3
   label_name = "my_label"
   head = head_lib._multi_label_head(
       n_classes=n_classes,
       label_name=label_name,
       metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         {}, model_fn.ModeKeys.TRAIN, {label_name: self._labels},
         _noop_train_op, logits=self._logits)
     self._assert_output_alternatives(model_fn_ops)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #23
0
 def testMultiLabelWithLabelName(self):
   n_classes = 3
   label_name = "my_label"
   head = head_lib._multi_label_head(
       n_classes=n_classes,
       label_name=label_name,
       metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         {}, model_fn.ModeKeys.TRAIN, {label_name: self._labels},
         _noop_train_op, logits=self._logits)
     self._assert_output_alternatives(model_fn_ops)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #24
0
 def testMultiLabelWithWeight(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes,
       weight_column_name="label_weight",
       metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     model_fn_ops = head.create_model_fn_ops(
         features={"label_weight": .1},
         labels=self._labels,
         mode=model_fn.ModeKeys.TRAIN,
         train_op_fn=_noop_train_op,
         logits=self._logits)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     _assert_metrics(self, .089985214,
                     self._expected_eval_metrics(2.69956), model_fn_ops)
Exemple #25
0
 def testMultiLabelWithLabelName(self):
   n_classes = 3
   label_name = "my_label"
   head = head_lib._multi_label_head(
       n_classes=n_classes,
       label_name=label_name,
       metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     logits = constant_op.constant([[1., 0., 0.]])
     labels = {label_name: constant_op.constant([[0, 0, 1]])}
     model_fn_ops = head.head_ops(
         {}, labels, model_fn.ModeKeys.TRAIN, _noop_train_op, logits=logits)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #26
0
 def testMultiLabelWithLabelName(self):
   n_classes = 3
   label_name = "my_label"
   head = head_lib._multi_label_head(
       n_classes=n_classes, label_name=label_name,
       metric_class_ids=range(n_classes))
   with tf.Graph().as_default(), tf.Session():
     logits = tf.constant([[1., 0., 0.]])
     labels = {label_name: tf.constant([[0, 0, 1]])}
     model_fn_ops = head.head_ops({}, labels,
                                  tf.contrib.learn.ModeKeys.TRAIN,
                                  _noop_train_op, logits=logits)
     _assert_no_variables(self)
     expected_loss = .89985204
     _assert_metrics(
         self, expected_loss, self._expected_eval_metrics(expected_loss),
         model_fn_ops)
Exemple #27
0
 def testMultiLabelEvalMode(self):
     n_classes = 3
     head = head_lib._multi_label_head(n_classes=n_classes,
                                       metric_class_ids=range(n_classes))
     with ops.Graph().as_default(), session.Session():
         logits = constant_op.constant([[1., 0., 0.]])
         labels = constant_op.constant([[0, 0, 1]])
         model_fn_ops = head.head_ops({},
                                      labels,
                                      model_fn.ModeKeys.EVAL,
                                      _noop_train_op,
                                      logits=logits)
         self.assertIsNone(model_fn_ops.train_op)
         _assert_no_variables(self)
         _assert_summary_tags(self, ["loss"])
         expected_loss = .89985204
         _assert_metrics(self, expected_loss,
                         self._expected_eval_metrics(expected_loss),
                         model_fn_ops)
Exemple #28
0
 def testMultiLabelSparseTensorLabelsTooFewClasses(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   # Set _logits_dimension (n_classes) to a lower value; if it's set to 1
   # upfront, the class throws an error during initialization.
   head._logits_dimension = 1
   with ops.Graph().as_default(), session.Session():
     labels = sparse_tensor.SparseTensorValue(
         indices=((0, 0),),
         values=(2,),
         dense_shape=(1, 1))
     with self.assertRaisesRegexp(ValueError,
                                  "Must set num_classes >= 2 when passing"):
       head.create_model_fn_ops(
           features={},
           labels=labels,
           mode=model_fn.ModeKeys.TRAIN,
           train_op_fn=_noop_train_op,
           logits=[0.])
Exemple #29
0
 def testMultiLabelSparseTensorLabels(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     labels = sparse_tensor.SparseTensorValue(
         indices=((0, 0),),
         values=(2,),
         dense_shape=(1, 1))
     model_fn_ops = head.create_model_fn_ops(
         features={},
         mode=model_fn.ModeKeys.TRAIN,
         labels=labels,
         train_op_fn=_noop_train_op,
         logits=self._logits)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #30
0
 def testMultiLabelSparseTensorLabels(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   with ops.Graph().as_default(), session.Session():
     labels = sparse_tensor.SparseTensorValue(
         indices=((0, 0),),
         values=(2,),
         dense_shape=(1, 1))
     model_fn_ops = head.create_model_fn_ops(
         features={},
         mode=model_fn.ModeKeys.TRAIN,
         labels=labels,
         train_op_fn=_noop_train_op,
         logits=self._logits)
     _assert_no_variables(self)
     _assert_summary_tags(self, ["loss"])
     expected_loss = .89985204
     _assert_metrics(self, expected_loss,
                     self._expected_eval_metrics(expected_loss), model_fn_ops)
Exemple #31
0
 def testMultiLabelSparseTensorLabelsTooFewClasses(self):
   n_classes = 3
   head = head_lib._multi_label_head(
       n_classes=n_classes, metric_class_ids=range(n_classes))
   # Set _logits_dimension (n_classes) to a lower value; if it's set to 1
   # upfront, the class throws an error during initialization.
   head._logits_dimension = 1
   with ops.Graph().as_default(), session.Session():
     labels = sparse_tensor.SparseTensorValue(
         indices=((0, 0),),
         values=(2,),
         dense_shape=(1, 1))
     with self.assertRaisesRegexp(ValueError,
                                  "Must set num_classes >= 2 when passing"):
       head.create_model_fn_ops(
           features={},
           labels=labels,
           mode=model_fn.ModeKeys.TRAIN,
           train_op_fn=_noop_train_op,
           logits=[0.])