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)
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)
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))
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)
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)
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)
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)
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))
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)
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))
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)
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))
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)
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)
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)
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)
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)
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))
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)
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)
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)
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)
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)
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.])
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)