コード例 #1
0
    def testTrainSaveLoad(self):
        """Tests that insures you can save and reload a trained model."""
        def _input_fn(num_epochs=None):
            features = {
                'age':
                input_lib.limit_epochs(constant_op.constant([[0.8], [0.15],
                                                             [0.]]),
                                       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.2],
                                                  dtype=dtypes.float32)

        model_dir = tempfile.mkdtemp()
        regressor = debug.DebugRegressor(
            model_dir=model_dir, config=run_config.RunConfig(tf_random_seed=1))

        regressor.fit(input_fn=_input_fn, steps=5)
        predict_input_fn = functools.partial(_input_fn, num_epochs=1)
        predictions = list(regressor.predict_scores(input_fn=predict_input_fn))
        del regressor

        regressor2 = debug.DebugRegressor(
            model_dir=model_dir, config=run_config.RunConfig(tf_random_seed=1))
        predictions2 = list(
            regressor2.predict_scores(input_fn=predict_input_fn))
        self.assertAllClose(predictions, predictions2)
コード例 #2
0
    def testLossWithWeights(self):
        """Tests loss calculation with weights."""
        def _input_fn_train():
            # 4 rows with equal weight, one of them (y = x), three of them (y=Not(x))
            # The algorithm should learn (y = 0.25).
            labels = constant_op.constant([[1.], [0.], [0.], [0.]])
            features = {
                'x': array_ops.ones(shape=[4, 1], dtype=dtypes.float32),
                'w': constant_op.constant([[1.], [1.], [1.], [1.]])
            }
            return features, labels

        def _input_fn_eval():
            # 4 rows, with different weights.
            labels = constant_op.constant([[1.], [0.], [0.], [0.]])
            features = {
                'x': array_ops.ones(shape=[4, 1], dtype=dtypes.float32),
                'w': constant_op.constant([[7.], [1.], [1.], [1.]])
            }
            return features, labels

        regressor = debug.DebugRegressor(
            weight_column_name='w',
            config=run_config.RunConfig(tf_random_seed=1))

        regressor.fit(input_fn=_input_fn_train, steps=5)
        scores = regressor.evaluate(input_fn=_input_fn_eval, steps=1)
        self.assertIn('loss', scores)
コード例 #3
0
    def testTrainWithWeights(self):
        """Tests training with given weight column."""
        def _input_fn_train():
            # Create 4 rows, one of them (y = x), three of them (y=Not(x))
            # First row has more weight than others. Model should fit (y=x) better
            # than (y=Not(x)) due to the relative higher weight of the first row.
            labels = constant_op.constant([[1.], [0.], [0.], [0.]])
            features = {
                'x': array_ops.ones(shape=[4, 1], dtype=dtypes.float32),
                'w': constant_op.constant([[100.], [3.], [2.], [2.]])
            }
            return features, labels

        def _input_fn_eval():
            # Create 4 rows (y = x)
            labels = constant_op.constant([[1.], [1.], [1.], [1.]])
            features = {
                'x': array_ops.ones(shape=[4, 1], dtype=dtypes.float32),
                'w': constant_op.constant([[1.], [1.], [1.], [1.]])
            }
            return features, labels

        regressor = debug.DebugRegressor(
            weight_column_name='w',
            config=run_config.RunConfig(tf_random_seed=1))

        regressor.fit(input_fn=_input_fn_train, steps=5)
        scores = regressor.evaluate(input_fn=_input_fn_eval, steps=1)
        self.assertIn('loss', scores)
コード例 #4
0
 def testRegression_MatrixData(self):
     """Tests regression using matrix data as input."""
     regressor = debug.DebugRegressor(config=run_config.RunConfig(
         tf_random_seed=1))
     input_fn = test_data.iris_input_logistic_fn
     regressor.fit(input_fn=input_fn, steps=200)
     scores = regressor.evaluate(input_fn=input_fn, steps=1)
     self.assertIn('loss', scores)
コード例 #5
0
 def testRegression_NpMatrixData(self):
     """Tests binary classification using numpy matrix data as input."""
     iris = test_data.prepare_iris_data_for_logistic_regression()
     train_x = iris.data
     train_y = iris.target
     regressor = debug.DebugRegressor(config=run_config.RunConfig(
         tf_random_seed=1))
     regressor.fit(x=train_x, y=train_y, steps=200)
     scores = regressor.evaluate(x=train_x, y=train_y, steps=1)
     self.assertIn('loss', scores)
コード例 #6
0
    def testCustomMetrics(self):
        """Tests custom evaluation metrics."""
        def _input_fn(num_epochs=None):
            # Create 4 rows, one of them (y = x), three of them (y=Not(x))
            labels = constant_op.constant([[1.], [0.], [0.], [0.]])
            features = {
                'x':
                input_lib.limit_epochs(array_ops.ones(shape=[4, 1],
                                                      dtype=dtypes.float32),
                                       num_epochs=num_epochs),
            }
            return features, labels

        def _my_metric_op(predictions, labels):
            return math_ops.reduce_sum(math_ops.multiply(predictions, labels))

        regressor = debug.DebugRegressor(config=run_config.RunConfig(
            tf_random_seed=1))

        regressor.fit(input_fn=_input_fn, steps=5)
        scores = regressor.evaluate(
            input_fn=_input_fn,
            steps=1,
            metrics={
                'my_error':
                MetricSpec(metric_fn=metric_ops.streaming_mean_squared_error,
                           prediction_key='scores'),
                'my_metric':
                MetricSpec(metric_fn=_my_metric_op, prediction_key='scores')
            })
        self.assertIn('loss', set(scores.keys()))
        self.assertIn('my_error', set(scores.keys()))
        self.assertIn('my_metric', set(scores.keys()))
        predict_input_fn = functools.partial(_input_fn, num_epochs=1)
        predictions = np.array(
            list(regressor.predict_scores(input_fn=predict_input_fn)))
        self.assertAlmostEqual(
            _sklearn.mean_squared_error(np.array([1, 0, 0, 0]), predictions),
            scores['my_error'])

        # Tests the case where the prediction_key is not "scores".
        with self.assertRaisesRegexp(KeyError, 'bad_type'):
            regressor.evaluate(input_fn=_input_fn,
                               steps=1,
                               metrics={
                                   'bad_name':
                                   MetricSpec(
                                       metric_fn=metric_ops.streaming_auc,
                                       prediction_key='bad_type')
                               })
コード例 #7
0
    def testLoss(self):
        """Tests loss calculation."""
        def _input_fn_train():
            # Create 4 rows, one of them (y = x), three of them (y=Not(x))
            # The algorithm should learn (y = 0.25).
            labels = constant_op.constant([[1.], [0.], [0.], [0.]])
            features = {
                'x': array_ops.ones(shape=[4, 1], dtype=dtypes.float32),
            }
            return features, labels

        regressor = debug.DebugRegressor(config=run_config.RunConfig(
            tf_random_seed=1))

        regressor.fit(input_fn=_input_fn_train, steps=5)
        scores = regressor.evaluate(input_fn=_input_fn_train, steps=1)
        self.assertIn('loss', scores)
コード例 #8
0
    def testRegression_MatrixData_Labels1D(self):
        """Same as the last test, but label shape is [100] instead of [100, 1]."""
        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)

        regressor = debug.DebugRegressor(config=run_config.RunConfig(
            tf_random_seed=1))

        regressor.fit(input_fn=_input_fn, steps=200)
        scores = regressor.evaluate(input_fn=_input_fn, steps=1)
        self.assertIn('loss', scores)
コード例 #9
0
    def testPredictScores(self):
        """Tests that DebugRegressor outputs the mean target."""
        (train_features, train_labels), (test_features,
                                         test_labels) = _train_test_split(
                                             [self.features, self.targets])
        mean_target = np.mean(train_labels, 0)
        expected_prediction = np.vstack(
            [mean_target for _ in range(test_labels.shape[0])])

        classifier = debug.DebugRegressor(label_dimension=LABEL_DIMENSION)
        classifier.fit(input_fn=_input_fn_builder(train_features,
                                                  train_labels),
                       steps=50)

        pred = classifier.predict_scores(
            input_fn=_input_fn_builder(test_features, None))
        self.assertAllClose(expected_prediction, np.vstack(pred), atol=0.1)
コード例 #10
0
    def testRegression_TensorData(self):
        """Tests regression using tensor data as input."""
        def _input_fn(num_epochs=None):
            features = {
                'age':
                input_lib.limit_epochs(constant_op.constant([[.8], [.15],
                                                             [0.]]),
                                       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.2],
                                                  dtype=dtypes.float32)

        regressor = debug.DebugRegressor(config=run_config.RunConfig(
            tf_random_seed=1))

        regressor.fit(input_fn=_input_fn, steps=200)

        scores = regressor.evaluate(input_fn=_input_fn, steps=1)
        self.assertIn('loss', scores)
コード例 #11
0
 def testExperimentIntegration(self):
     exp = experiment.Experiment(
         estimator=debug.DebugRegressor(),
         train_input_fn=test_data.iris_input_logistic_fn,
         eval_input_fn=test_data.iris_input_logistic_fn)
     exp.test()