Ejemplo n.º 1
0
    def test_checkpoint_and_export(self):
        model_dir = tempfile.mkdtemp()
        config = run_config_lib.RunConfig(save_checkpoints_steps=3)
        est = dnn.DNNClassifier(n_classes=3,
                                feature_columns=[
                                    feature_column.real_valued_column(
                                        'feature', dimension=4)
                                ],
                                hidden_units=[3, 3],
                                model_dir=model_dir,
                                config=config)

        exp_strategy = saved_model_export_utils.make_export_strategy(
            est, 'export_input', exports_to_keep=None)

        ex = experiment.Experiment(
            est,
            train_input_fn=test_data.iris_input_multiclass_fn,
            eval_input_fn=test_data.iris_input_multiclass_fn,
            export_strategies=(exp_strategy, ),
            train_steps=8,
            checkpoint_and_export=True,
            eval_delay_secs=0)

        with test.mock.patch.object(ex, '_maybe_export'):
            with test.mock.patch.object(ex, '_call_evaluate'):
                ex.train_and_evaluate()
                # Eval and export are called after steps 1, 4, 7, and 8 (after training
                # is completed).
                self.assertEqual(ex._maybe_export.call_count, 4)
                self.assertEqual(ex._call_evaluate.call_count, 4)
Ejemplo n.º 2
0
 def testIrisDNN(self):
     iris = base.load_iris()
     feature_columns = [feature_column.real_valued_column("", dimension=4)]
     classifier = dnn.DNNClassifier(
         feature_columns=feature_columns,
         hidden_units=[10, 20, 10],
         n_classes=3,
         config=run_config.RunConfig(tf_random_seed=1))
     classifier.fit(iris.data, iris.target, max_steps=200)
     variable_names = classifier.get_variable_names()
     self.assertEqual(
         classifier.get_variable_value("dnn/hiddenlayer_0/weights").shape,
         (4, 10))
     self.assertEqual(
         classifier.get_variable_value("dnn/hiddenlayer_1/weights").shape,
         (10, 20))
     self.assertEqual(
         classifier.get_variable_value("dnn/hiddenlayer_2/weights").shape,
         (20, 10))
     self.assertEqual(
         classifier.get_variable_value("dnn/logits/weights").shape, (10, 3))
     self.assertIn("dnn/hiddenlayer_0/biases", variable_names)
     self.assertIn("dnn/hiddenlayer_1/biases", variable_names)
     self.assertIn("dnn/hiddenlayer_2/biases", variable_names)
     self.assertIn("dnn/logits/biases", variable_names)
Ejemplo n.º 3
0
 def testDNNDropout0(self):
     # Dropout prob == 0.
     iris = base.load_iris()
     feature_columns = [feature_column.real_valued_column("", dimension=4)]
     classifier = dnn.DNNClassifier(
         feature_columns=feature_columns,
         hidden_units=[10, 20, 10],
         n_classes=3,
         dropout=0.0,
         config=run_config.RunConfig(tf_random_seed=1))
     classifier.fit(iris.data, iris.target, max_steps=200)
Ejemplo n.º 4
0
 def testIrisDNN(self):
     iris = base.load_iris()
     feature_columns = [feature_column.real_valued_column("", dimension=4)]
     classifier = dnn.DNNClassifier(
         feature_columns=feature_columns,
         hidden_units=[10, 20, 10],
         n_classes=3,
         config=run_config.RunConfig(tf_random_seed=1))
     classifier.fit(iris.data, iris.target, max_steps=200)
     weights = classifier.weights_
     self.assertEqual(weights[0].shape, (4, 10))
     self.assertEqual(weights[1].shape, (10, 20))
     self.assertEqual(weights[2].shape, (20, 10))
     self.assertEqual(weights[3].shape, (10, 3))
     biases = classifier.bias_
     self.assertEqual(len(biases), 4)
Ejemplo n.º 5
0
    def benchmarkLogisticFloatLabel(self):
        def _input_fn(num_epochs=None):
            features = {
                'age':
                input_lib.limit_epochs(constant_op.constant(
                    ((50, ), (20, ), (10, ))),
                                       num_epochs=num_epochs),
                'language':
                sparse_tensor.SparseTensor(values=input_lib.limit_epochs(
                    ('en', 'fr', 'zh'), num_epochs=num_epochs),
                                           indices=((0, 0), (0, 1), (2, 0)),
                                           dense_shape=(3, 2))
            }
            return features, constant_op.constant(((0.8, ), (0., ), (0.2, )),
                                                  dtype=dtypes.float32)

        lang_column = feature_column.sparse_column_with_hash_bucket(
            'language', hash_bucket_size=20)
        n_classes = 2
        classifier = dnn.DNNClassifier(
            n_classes=n_classes,
            feature_columns=(feature_column.embedding_column(lang_column,
                                                             dimension=1),
                             feature_column.real_valued_column('age')),
            hidden_units=(3, 3),
            config=run_config.RunConfig(tf_random_seed=1))
        steps = 1000
        metrics = classifier.fit(input_fn=_input_fn,
                                 steps=steps).evaluate(input_fn=_input_fn,
                                                       steps=1)
        estimator_test_utils.assert_in_range(steps, steps + 5, 'global_step',
                                             metrics)

        # Prediction probabilities mirror the labels column, which proves that the
        # classifier learns from float input.
        self._report_metrics(metrics)
        self._report_predictions(
            classifier=classifier,
            input_fn=functools.partial(_input_fn, num_epochs=1),
            iters=metrics['global_step'],
            n_examples=3,
            n_classes=n_classes,
            expected_probabilities=((0.2, 0.8), (1., 0.), (0.8, 0.2)),
            expected_classes=(1, 0, 0),
            benchmark_name_override=(
                'DNNClassifierBenchmark.benchmarkLogisticFloatLabel_predictions'
            ))
Ejemplo n.º 6
0
    def benchmarkLogisticMatrixData(self):
        classifier = dnn.DNNClassifier(
            feature_columns=(feature_column.real_valued_column('feature',
                                                               dimension=4), ),
            hidden_units=(3, 3),
            config=run_config.RunConfig(tf_random_seed=1))
        input_fn = test_data.iris_input_logistic_fn
        steps = 400
        metrics = classifier.fit(input_fn=input_fn,
                                 steps=steps).evaluate(input_fn=input_fn,
                                                       steps=1)
        estimator_test_utils.assert_in_range(steps, steps + 5, 'global_step',
                                             metrics)
        estimator_test_utils.assert_in_range(0.9, 1.0, 'accuracy', metrics)
        estimator_test_utils.assert_in_range(0.0, 0.3, 'loss', metrics)

        self._report_metrics(metrics)
Ejemplo n.º 7
0
    def benchmarkLogisticTensorData(self):
        def _input_fn(num_epochs=None):
            features = {
                'age':
                input_lib.limit_epochs(constant_op.constant(
                    ((.8, ), (0.2, ), (.1, ))),
                                       num_epochs=num_epochs),
                'language':
                sparse_tensor.SparseTensor(values=input_lib.limit_epochs(
                    ('en', 'fr', 'zh'), num_epochs=num_epochs),
                                           indices=((0, 0), (0, 1), (2, 0)),
                                           dense_shape=(3, 2))
            }
            return features, constant_op.constant(((1, ), (0, ), (0, )),
                                                  dtype=dtypes.int32)

        lang_column = feature_column.sparse_column_with_hash_bucket(
            'language', hash_bucket_size=20)
        classifier = dnn.DNNClassifier(
            feature_columns=(feature_column.embedding_column(lang_column,
                                                             dimension=1),
                             feature_column.real_valued_column('age')),
            hidden_units=(3, 3),
            config=run_config.RunConfig(tf_random_seed=1))
        steps = 100
        metrics = classifier.fit(input_fn=_input_fn,
                                 steps=steps).evaluate(input_fn=_input_fn,
                                                       steps=1)
        estimator_test_utils.assert_in_range(steps, steps + 5, 'global_step',
                                             metrics)
        estimator_test_utils.assert_in_range(0.9, 1.0, 'accuracy', metrics)
        estimator_test_utils.assert_in_range(0.0, 0.3, 'loss', metrics)

        self._report_metrics(metrics)
        self._report_predictions(
            classifier=classifier,
            input_fn=functools.partial(_input_fn, num_epochs=1),
            iters=metrics['global_step'],
            n_examples=3,
            n_classes=2,
            expected_classes=(1, 0, 0),
            benchmark_name_override=(
                'DNNClassifierBenchmark.benchmarkLogisticTensorData_predictions'
            ))
Ejemplo n.º 8
0
    def benchmarkLogisticNpMatrixData(self):
        classifier = dnn.DNNClassifier(
            feature_columns=(feature_column.real_valued_column('',
                                                               dimension=4), ),
            hidden_units=(3, 3),
            config=run_config.RunConfig(tf_random_seed=1))
        iris = test_data.prepare_iris_data_for_logistic_regression()
        train_x = iris.data
        train_y = iris.target
        steps = 100
        metrics = classifier.fit(x=train_x, y=train_y,
                                 steps=steps).evaluate(x=train_x,
                                                       y=train_y,
                                                       steps=1)
        estimator_test_utils.assert_in_range(steps, steps + 5, 'global_step',
                                             metrics)
        estimator_test_utils.assert_in_range(0.8, 1.0, 'accuracy', metrics)

        self._report_metrics(metrics)
Ejemplo n.º 9
0
    def benchmarkMultiClassMatrixData(self):
        """Tests multi-class classification using matrix data as input."""
        classifier = dnn.DNNClassifier(
            n_classes=3,
            feature_columns=(feature_column.real_valued_column('feature',
                                                               dimension=4), ),
            hidden_units=(3, 3),
            config=run_config.RunConfig(tf_random_seed=1))

        input_fn = test_data.iris_input_multiclass_fn
        steps = 500
        metrics = classifier.fit(input_fn=input_fn,
                                 steps=steps).evaluate(input_fn=input_fn,
                                                       steps=1)
        estimator_test_utils.assert_in_range(steps, steps + 5, 'global_step',
                                             metrics)
        estimator_test_utils.assert_in_range(0.9, 1.0, 'accuracy', metrics)
        estimator_test_utils.assert_in_range(0.0, 0.4, 'loss', metrics)

        self._report_metrics(metrics)
Ejemplo n.º 10
0
    def benchmarkLogisticMatrixDataLabels1D(self):
        def _input_fn():
            iris = test_data.prepare_iris_data_for_logistic_regression()
            return {
                'feature': constant_op.constant(iris.data,
                                                dtype=dtypes.float32)
            }, constant_op.constant(iris.target,
                                    shape=(100, ),
                                    dtype=dtypes.int32)

        classifier = dnn.DNNClassifier(
            feature_columns=(feature_column.real_valued_column('feature',
                                                               dimension=4), ),
            hidden_units=(3, 3),
            config=run_config.RunConfig(tf_random_seed=1))
        steps = 1000
        metrics = classifier.fit(input_fn=_input_fn,
                                 steps=steps).evaluate(input_fn=_input_fn,
                                                       steps=1)
        estimator_test_utils.assert_in_range(steps, steps + 5, 'global_step',
                                             metrics)
        estimator_test_utils.assert_in_range(0.9, 1.0, 'accuracy', metrics)

        self._report_metrics(metrics)