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' )
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)
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)
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)