Exemplo n.º 1
0
  def _test_complete_flow(
      self, train_input_fn, eval_input_fn, predict_input_fn, input_dimension,
      label_dimension, batch_size):
    feature_columns = [
        feature_column.numeric_column('x', shape=(input_dimension,))]
    est = linear.LinearEstimatorV2(
        head=regression_head.RegressionHead(label_dimension=label_dimension),
        feature_columns=feature_columns,
        model_dir=self._model_dir)

    # Train
    num_steps = 10
    est.train(train_input_fn, steps=num_steps)

    # Evaluate
    scores = est.evaluate(eval_input_fn)
    self.assertEqual(num_steps, scores[ops.GraphKeys.GLOBAL_STEP])
    self.assertIn('loss', six.iterkeys(scores))

    # Predict
    predictions = np.array([
        x[prediction_keys.PredictionKeys.PREDICTIONS]
        for x in est.predict(predict_input_fn)
    ])
    self.assertAllEqual((batch_size, label_dimension), predictions.shape)

    # Export
    feature_spec = feature_column.make_parse_example_spec(feature_columns)
    serving_input_receiver_fn = export.build_parsing_serving_input_receiver_fn(
        feature_spec)
    export_dir = est.export_saved_model(tempfile.mkdtemp(),
                                        serving_input_receiver_fn)
    self.assertTrue(gfile.Exists(export_dir))
Exemplo n.º 2
0
def _linear_estimator_fn(weight_column=None, label_dimension=1, **kwargs):
  """Returns a LinearEstimator that uses regression_head."""
  return linear.LinearEstimatorV2(
      head=regression_head.RegressionHead(
          weight_column=weight_column,
          label_dimension=label_dimension,
          # Tests in core (from which this test inherits) test the sum loss.
          loss_reduction=losses_utils.ReductionV2.SUM_OVER_BATCH_SIZE),
      **kwargs)
    def _test_ckpt_converter(self, train_input_fn, eval_input_fn,
                             predict_input_fn, input_dimension,
                             label_dimension, batch_size, optimizer):

        # Create checkpoint in CannedEstimator v1.
        feature_columns_v1 = [
            feature_column._numeric_column('x', shape=(input_dimension, ))
        ]

        est_v1 = linear.LinearEstimator(
            head=head_lib._regression_head(label_dimension=label_dimension),
            feature_columns=feature_columns_v1,
            model_dir=self._old_ckpt_dir,
            optimizer=optimizer)
        # Train
        num_steps = 10
        est_v1.train(train_input_fn, steps=num_steps)
        self.assertIsNotNone(est_v1.latest_checkpoint())
        self.assertTrue(est_v1.latest_checkpoint().startswith(
            self._old_ckpt_dir))

        # Convert checkpoint from v1 to v2.
        source_checkpoint = os.path.join(self._old_ckpt_dir, 'model.ckpt-10')
        source_graph = os.path.join(self._old_ckpt_dir, 'graph.pbtxt')
        target_checkpoint = os.path.join(self._new_ckpt_dir, 'model.ckpt-10')
        checkpoint_converter.convert_checkpoint('linear', source_checkpoint,
                                                source_graph,
                                                target_checkpoint)

        # Create CannedEstimator V2 and restore from the converted checkpoint.
        feature_columns_v2 = [
            tf.feature_column.numeric_column('x', shape=(input_dimension, ))
        ]
        est_v2 = linear.LinearEstimatorV2(head=regression_head.RegressionHead(
            label_dimension=label_dimension),
                                          feature_columns=feature_columns_v2,
                                          model_dir=self._new_ckpt_dir,
                                          optimizer=optimizer)
        # Train
        extra_steps = 10
        est_v2.train(train_input_fn, steps=extra_steps)
        self.assertIsNotNone(est_v2.latest_checkpoint())
        self.assertTrue(est_v2.latest_checkpoint().startswith(
            self._new_ckpt_dir))
        # Make sure estimator v2 restores from the converted checkpoint, and
        # continues training extra steps.
        self.assertEqual(
            num_steps + extra_steps,
            est_v2.get_variable_value(tf.compat.v1.GraphKeys.GLOBAL_STEP))
Exemplo n.º 4
0
def _linear_estimator_classifier_fn(n_classes=3, **kwargs):
  return linear.LinearEstimatorV2(
      head=multi_class_head.MultiClassHead(n_classes=n_classes), **kwargs)