Example #1
0
  def _CalibratedLinearRegressorWithQuantiles(self, feature_names,
                                              feature_columns, **hparams_args):
    """Model that saves/retrieves quantiles."""

    # Quantiles to be used for x2
    quantiles_dir = self.get_temp_dir()
    keypoints_initialization.save_quantiles_for_keypoints(
        input_fn=self._test_data.threed_input_fn(True),
        save_dir=quantiles_dir,
        feature_columns=feature_columns,
        num_steps=1)

    # Keypoint initialization function for x0 and x1
    def init_fn():
      return keypoints_initialization.uniform_keypoints_for_signal(
          _NUM_KEYPOINTS, -1., 1., -1., 1.)

    hparams = tfl_hparams.CalibratedLinearHParams(
        feature_names, num_keypoints=_NUM_KEYPOINTS, **hparams_args)
    return calibrated_linear.calibrated_linear_regressor(
        feature_columns=feature_columns,
        hparams=hparams,
        keypoints_initializers_fn={
            'x0': init_fn,
            'x1': init_fn
        },
        quantiles_dir=quantiles_dir  # Used for 'x2'
    )
Example #2
0
 def testLoadKeypointsFromQuantilesLoadingLabelQuantiles(self):
     input_fn, unused_feature_names, unused_feature_columns = self._BuildInputs(
         x0=np.random.uniform(0.0, 2.0, 100000),
         x1=[0],
         x2=[0],
         label=np.random.uniform(0.0, 100.0, 100000))
     save_dir = os.path.join(
         self.get_temp_dir(),
         'load_keypoints_from_quantiles_loading_label_quantiles')
     keypoints_initialization.save_quantiles_for_keypoints(input_fn,
                                                           save_dir,
                                                           override=True)
     with tf.Graph().as_default() as g, self.session(graph=g) as session:
         result = keypoints_initialization.load_keypoints_from_quantiles(
             feature_names=['x0'],
             save_dir=save_dir,
             num_keypoints=5,
             use_label_quantiles_for_outputs=True)
         result = session.run(result)
     self.assertAllClose(
         {
             'x0': [
                 np.array([0.0, 0.5, 1.0, 1.5, 2.0]),
                 np.array([0.0, 25.0, 50.0, 75.0, 100.0])
             ]
         },
         result,
         atol=0.2,
         msg='load_keypoints_from_quantiles didn\'t produce expected labels'
     )
    def testQuantileInitWithMissingInputValuesDict(self):
        num_examples = 10
        x0 = np.linspace(-1.0, 1.0, num_examples)
        x1 = np.linspace(0.0, 1.0, num_examples)
        x2 = np.linspace(0.0, 1.0, num_examples)

        input_fn, feature_names, feature_columns = self._BuildInputs(
            x0, x1, x2)
        save_dir = os.path.join(self.get_temp_dir(),
                                'exclude_input_values_dict')
        keypoints_initialization.save_quantiles_for_keypoints(
            input_fn,
            save_dir,
            feature_columns=feature_columns,
            num_quantiles=num_examples,
            override=True)

        with ops.Graph().as_default() as g:
            # Check by using load_keypoints_from_quantiles.
            keypoints_init = keypoints_initialization.load_keypoints_from_quantiles(
                feature_names,
                save_dir,
                num_keypoints=3,
                output_min={
                    'x0': 0.,
                    'x1': 0.,
                    'x2': 0.
                },
                output_max={
                    'x0': 1.,
                    'x1': 1.,
                    'x2': 1.
                },
                missing_input_values_dict={
                    'x0': -1.0,
                    'x1': 0.0,
                    'x2': None
                },
            )
            with self.test_session(graph=g) as sess:
                keypoints_init = sess.run(keypoints_init)

        self.assertAllClose(keypoints_init['x0'][0], [-0.778, 0.111, 1.0],
                            atol=0.1)
        self.assertAllClose(keypoints_init['x0'][1], [0.0, 0.5, 1.0],
                            atol=0.01)
        self.assertAllClose(keypoints_init['x1'][0], [0.111, 0.556, 1.0],
                            atol=0.1)
        self.assertAllClose(keypoints_init['x1'][1], [0.0, 0.5, 1.0],
                            atol=0.01)
        self.assertAllClose(keypoints_init['x2'][0], [0.0, 0.444, 1.0],
                            atol=0.01)
        self.assertAllClose(keypoints_init['x2'][1], [0.0, 0.5, 1.0],
                            atol=0.01)
    def testQuantileInitWithReversedDict(self):
        num_examples = 100
        x0 = np.linspace(0.0, 10.0, num_examples)
        x1 = np.linspace(0.0, 10.0, num_examples)
        x2 = np.linspace(0.0, 1.0, num_examples)

        input_fn, feature_names, feature_columns = self._BuildInputs(
            x0, x1, x2)
        save_dir = os.path.join(self.get_temp_dir(), 'reversed_dict')
        keypoints_initialization.save_quantiles_for_keypoints(
            input_fn,
            save_dir,
            feature_columns=feature_columns,
            num_quantiles=100,
            override=True)
        reversed_dict = {'x0': False, 'x1': True, 'x2': False}

        with ops.Graph().as_default() as g:
            # Check by using load_keypoints_from_quantiles.
            keypoints_init = keypoints_initialization.load_keypoints_from_quantiles(
                feature_names,
                save_dir,
                num_keypoints=3,
                output_min={
                    'x0': 0.,
                    'x1': 0.,
                    'x2': 0.
                },
                output_max={
                    'x0': 1.,
                    'x1': 1.,
                    'x2': 1.
                },
                reversed_dict=reversed_dict)
            with self.test_session(graph=g) as sess:
                keypoints_init = sess.run(keypoints_init)

        self.assertAllClose(keypoints_init['x0'][0], [0.0, 5.0, 10.0],
                            atol=0.1)
        self.assertAllClose(keypoints_init['x0'][1], [0.0, 0.5, 1.0],
                            atol=0.01)
        self.assertAllClose(keypoints_init['x1'][0], [0.0, 5.0, 10.0],
                            atol=0.1)
        self.assertAllClose(keypoints_init['x1'][1], [1.0, 0.5, 0.0],
                            atol=0.01)
        self.assertAllClose(keypoints_init['x2'][0], [0.0, 0.5, 1.0],
                            atol=0.01)
        self.assertAllClose(keypoints_init['x2'][1], [0.0, 0.5, 1.0],
                            atol=0.01)
Example #5
0
 def testLoadKeypointsFromQuantilesRaises(self,
                                          use_label_quantiles_for_outputs,
                                          output_min, output_max, msg):
     input_fn, unused_feature_names, unused_feature_columns = self._BuildInputs(
         x0=np.random.uniform(0.0, 2.0, 100000),
         x1=[0],
         x2=[0],
         label=np.random.uniform(0.0, 100.0, 100000))
     save_dir = os.path.join(
         self.get_temp_dir(),
         'load_keypoints_from_quantiles_loading_label_quantiles')
     keypoints_initialization.save_quantiles_for_keypoints(input_fn,
                                                           save_dir,
                                                           override=True)
     with self.assertRaises(ValueError, msg=msg):
         keypoints_initialization.load_keypoints_from_quantiles(
             use_label_quantiles_for_outputs=use_label_quantiles_for_outputs,
             output_min=output_min,
             output_max=output_max,
             feature_names=['x0'],
             save_dir=save_dir,
             num_keypoints=5)
Example #6
0
 def testSaveQuantilesForKeypointsSavingLabelQuantiles(self):
     input_fn, unused_feature_names, unused_feature_columns = self._BuildInputs(
         x0=[0],
         x1=[0],
         x2=[0],
         label=np.random.uniform(0.0, 100.0, 100000))
     save_dir = os.path.join(self.get_temp_dir(),
                             'save_quantiles_for_keypoints_saving_labels')
     keypoints_initialization.save_quantiles_for_keypoints(input_fn,
                                                           save_dir,
                                                           override=True,
                                                           num_quantiles=5)
     subdir = os.path.join(save_dir,
                           keypoints_initialization._QUANTILES_SUBDIRECTORY)
     quantiles = keypoints_initialization._load_quantiles(
         subdir, keypoints_initialization._LABEL_FEATURE_NAME)
     self.assertAllClose(
         np.linspace(0, 100.0, 5),
         quantiles,
         atol=0.2,
         msg=(
             'quantiles saved by save_quantiles_for_keypoints() do not much'
             ' expected quantiles'))
    def _CheckSaveQuantilesForKeypoints(self, name, num_examples, num_steps,
                                        x0, x1, x2, use_feature_columns,
                                        override):
        input_fn, feature_names, feature_columns = self._BuildInputs(
            x0, x1, x2)
        save_dir = os.path.join(self.get_temp_dir(), name)
        keypoints_initialization.save_quantiles_for_keypoints(
            input_fn,
            save_dir,
            feature_columns=(feature_columns if use_feature_columns else None),
            num_quantiles=5,
            override=override)

        # Check by reading files directly.
        subdir = os.path.join(save_dir,
                              keypoints_initialization._QUANTILES_SUBDIRECTORY)
        quantiles_x0 = keypoints_initialization._load_quantiles(subdir, 'x0')
        quantiles_x1 = keypoints_initialization._load_quantiles(subdir, 'x1')
        quantiles_x2 = keypoints_initialization._load_quantiles(subdir, 'x2')
        self.assertAllClose(quantiles_x0, [0, 2.5**2, 5.**2, 7.5**2, 100.],
                            atol=0.2)
        self.assertAllClose(
            quantiles_x1,
            [1., math.pow(10., 0.5), 10.0,
             math.pow(10., 1.5), 100.],
            atol=0.2)
        # x2 should start with [0,0,...] and end in [..., 1, 1], the middle value
        # can be either 0 or 1.
        self.assertAllClose(quantiles_x2[0:2], [0., 0.], atol=1e-3)
        self.assertAllClose(quantiles_x2[-2:], [1., 1.], atol=1e-3)

        # New graph is needed because default graph is changed by save
        # keypoints, and self.test_session() will by default try to reuse a cached
        # session, with a different graph.
        with ops.Graph().as_default() as g:
            # Check by using load_keypoints_from_quantiles.
            keypoints_init = keypoints_initialization.load_keypoints_from_quantiles(
                feature_names,
                save_dir,
                3,
                output_min={
                    'x0': 0.,
                    'x1': 1.,
                    'x2': 7.
                },
                output_max={
                    'x0': 1.,
                    'x1': 10.,
                    'x2': 13.
                })
            with self.test_session(graph=g) as sess:
                keypoints_init = sess.run(keypoints_init)
        self.assertAllClose(keypoints_init['x0'][0], [0, 5.**2, 100.],
                            atol=0.2)
        self.assertAllClose(keypoints_init['x0'][1], [0., 0.5, 1.])
        self.assertAllClose(keypoints_init['x1'][0], [1., 10.0, 100.],
                            atol=0.2)
        self.assertAllClose(keypoints_init['x1'][1], [1., 5.5, 10.])

        # Notice x2 only has 2 unique values, so it should have lowered the
        # num_keypoints to 2.
        self.assertAllClose([0., 1.0], keypoints_init['x2'][0], atol=1e-3)
        self.assertAllClose([7., 13.0], keypoints_init['x2'][1], atol=1e-3)

        # Check that load_keypoints_from_quantiles don't generate anything
        # if num_keypoints is 0 or unset.
        with ops.Graph().as_default() as g:
            # Check by using load_keypoints_from_quantiles.
            keypoints_init = keypoints_initialization.load_keypoints_from_quantiles(
                feature_names,
                save_dir, {
                    'x0': 3,
                    'x2': 3,
                    'x1': 0
                },
                output_min={
                    'x0': 0.,
                    'x1': 1.,
                    'x2': 7.
                },
                output_max={
                    'x0': 1.,
                    'x1': 10.,
                    'x2': 13.
                })
            with self.test_session(graph=g) as sess:
                keypoints_init = sess.run(keypoints_init)
        self.assertTrue('x0' in keypoints_init)
        self.assertTrue('x2' in keypoints_init)
        self.assertTrue('x1' not in keypoints_init)