Exemple #1
0
  def test_bucketize_with_explicit_buckets_ragged_int_input(self):
    input_array = ragged_factory_ops.constant([[-1, 1, 3, 0], [0, 3, 1]],
                                              dtype=dtypes.int64)

    expected_output = [[0, 2, 3, 1], [1, 3, 2]]
    expected_output_shape = [None, None]

    input_data = keras.Input(shape=(None,), ragged=True, dtype=dtypes.int64)
    layer = discretization.Discretization(bin_boundaries=[-.5, 0.5, 1.5])
    bucket_data = layer(input_data)
    self.assertAllEqual(expected_output_shape, bucket_data.shape.as_list())
    model = keras.Model(inputs=input_data, outputs=bucket_data)
    output_dataset = model.predict(input_array)
    self.assertAllEqual(expected_output, output_dataset)
Exemple #2
0
    def test_bucketize_with_explicit_buckets_integer(self):
        input_array = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])

        expected_output = [[0, 2, 3, 1], [1, 3, 2, 1]]
        expected_output_shape = [None, 4]

        input_data = keras.Input(shape=(4, ))
        layer = discretization.Discretization(bin_boundaries=[0., 1., 2.])
        bucket_data = layer(input_data)
        self.assertAllEqual(expected_output_shape, bucket_data.shape.as_list())

        model = keras.Model(inputs=input_data, outputs=bucket_data)
        output_dataset = model.predict(input_array)
        self.assertAllEqual(expected_output, output_dataset)
Exemple #3
0
    def test_bucketize_with_explicit_buckets_sparse_int_input(self):
        indices = [[0, 1], [0, 2], [1, 1]]
        input_array = sparse_tensor.SparseTensor(indices=indices,
                                                 values=[-1, 1, 3],
                                                 dense_shape=[2, 3])
        expected_output = [0, 2, 3]
        input_data = keras.Input(shape=(3, ), dtype=dtypes.int32, sparse=True)
        layer = discretization.Discretization(bin_boundaries=[-.5, 0.5, 1.5])
        bucket_data = layer(input_data)

        model = keras.Model(inputs=input_data, outputs=bucket_data)
        output_dataset = model.predict(input_array, steps=1)
        self.assertAllEqual(indices, output_dataset.indices)
        self.assertAllEqual(expected_output, output_dataset.values)
Exemple #4
0
    def test_bucketize_with_explicit_buckets_ragged_float_input(self):
        input_array = ragged_factory_ops.constant([[-1.5, 1.0, 3.4, .5],
                                                   [0.0, 3.0, 1.3]])

        expected_output = [[0, 1, 3, 1], [0, 3, 2]]
        expected_output_shape = [None, None]

        input_data = keras.Input(shape=(None, ), ragged=True)
        layer = discretization.Discretization(bins=[0., 1., 2.])
        bucket_data = layer(input_data)
        self.assertAllEqual(expected_output_shape, bucket_data.shape.as_list())

        model = keras.Model(inputs=input_data, outputs=bucket_data)
        output_dataset = model.predict(input_array)
        self.assertAllEqual(expected_output, output_dataset)
    def test_bucketize_with_explicit_buckets_int_input(self):
        input_array = np.array([[-1, 1, 3, 0], [0, 3, 1, 0]], dtype=np.int64)

        expected_output = [[0, 2, 3, 1], [1, 3, 2, 1]]
        expected_output_shape = [None, None]

        input_data = keras.Input(shape=(None, ), dtype=dtypes.int64)
        layer = discretization.Discretization(
            bins=[-.5, 0.5, 1.5], output_mode=discretization.INTEGER)
        bucket_data = layer(input_data)
        self.assertAllEqual(expected_output_shape, bucket_data.shape.as_list())

        model = keras.Model(inputs=input_data, outputs=bucket_data)
        output_dataset = model.predict(input_array)
        self.assertAllEqual(expected_output, output_dataset)
Exemple #6
0
  def test_distribution(self, distribution):
    input_array = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])

    expected_output = [[0, 2, 3, 1], [1, 3, 2, 1]]
    expected_output_shape = [None, None]

    with distribution.scope():
      input_data = keras.Input(shape=(None,))
      layer = discretization.Discretization(
          bins=[0., 1., 2.], output_mode=discretization.INTEGER)
      bucket_data = layer(input_data)
      self.assertAllEqual(expected_output_shape, bucket_data.shape.as_list())

      model = keras.Model(inputs=input_data, outputs=bucket_data)
    output_dataset = model.predict(input_array)
    self.assertAllEqual(expected_output, output_dataset)
Exemple #7
0
  def test_distribution(self, distribution):
    input_array = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])

    expected_output = [[0, 1, 3, 1], [0, 3, 2, 0]]
    expected_output_shape = [None, 4]

    config.set_soft_device_placement(True)

    with distribution.scope():
      input_data = keras.Input(shape=(4,))
      layer = discretization.Discretization(bins=[0., 1., 2.])
      bucket_data = layer(input_data)
      self.assertAllEqual(expected_output_shape, bucket_data.shape.as_list())

      model = keras.Model(inputs=input_data, outputs=bucket_data)
    output_dataset = model.predict(input_array)
    self.assertAllEqual(expected_output, output_dataset)
    def test_bucketize_with_explicit_buckets_one_hot(self):
        input_array = np.array([[-1.5, 1.0, 3.4, .5], [0.0, 3.0, 1.3, 0.0]])

        # pyformat: disable
        expected_output = [[[1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1],
                            [0, 1, 0, 0]],
                           [[0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0],
                            [0, 1, 0, 0]]]
        # pyformat: enable
        num_buckets = 4
        expected_output_shape = [None, None, num_buckets]

        input_data = keras.Input(shape=(None, ))
        layer = discretization.Discretization(
            bins=[0., 1., 2.], output_mode=discretization.BINARY)
        bucket_data = layer(input_data)
        self.assertAllEqual(expected_output_shape, bucket_data.shape.as_list())

        model = keras.Model(inputs=input_data, outputs=bucket_data)
        output_dataset = model.predict(input_array)
        self.assertAllEqual(expected_output, output_dataset)
Exemple #9
0
  def test_layer_computation(self, adapt_data, test_data, use_dataset,
                             expected, num_bins=5, epsilon=0.01):

    input_shape = tuple(list(test_data.shape)[1:])
    np.random.shuffle(adapt_data)
    if use_dataset:
      # Keras APIs expect batched datasets
      adapt_data = dataset_ops.Dataset.from_tensor_slices(adapt_data).batch(
          test_data.shape[0] // 2)
      test_data = dataset_ops.Dataset.from_tensor_slices(test_data).batch(
          test_data.shape[0] // 2)

    layer = discretization.Discretization(epsilon=epsilon, num_bins=num_bins)
    layer.adapt(adapt_data)

    input_data = keras.Input(shape=input_shape)
    output = layer(input_data)
    model = keras.Model(input_data, output)
    model._run_eagerly = testing_utils.should_run_eagerly()
    output_data = model.predict(test_data)
    self.assertAllClose(expected, output_data)
Exemple #10
0
  def test_multiple_adapts(self):
    first_adapt = [[1], [2], [3]]
    second_adapt = [[4], [5], [6]]
    predict_input = [[2], [2]]
    expected_first_output = [[1], [1]]
    expected_second_output = [[0], [0]]

    inputs = keras.Input(shape=(1,), dtype=dtypes.int32)
    layer = discretization.Discretization(num_bins=3)
    layer.adapt(first_adapt)
    outputs = layer(inputs)
    model = keras.Model(inputs=inputs, outputs=outputs)

    actual_output = model.predict(predict_input)
    self.assertAllClose(actual_output, expected_first_output)

    # Re-adapt the layer on new inputs.
    layer.adapt(second_adapt)
    # Re-compile the model.
    model.compile()
    # `predict` should now use the new model state.
    actual_output = model.predict(predict_input)
    self.assertAllClose(actual_output, expected_second_output)
 def test_num_bins_and_bins_set_fails(self):
     with self.assertRaisesRegex(
             ValueError,
             r"`num_bins` and `bin_boundaries` should not be set.*5.*\[1, 2\]"
     ):
         _ = discretization.Discretization(num_bins=5, bins=[1, 2])
 def test_num_bins_negative_fails(self):
     with self.assertRaisesRegex(ValueError,
                                 "`num_bins` must be.*num_bins=-7"):
         _ = discretization.Discretization(num_bins=-7)
 def test_merge_with_unadapted_layers_fails(self):
     layer1 = discretization.Discretization(num_bins=2, name="layer1")
     layer1.adapt([1, 2, 3])
     layer2 = discretization.Discretization(num_bins=2, name="layer2")
     with self.assertRaisesRegex(ValueError, "Cannot merge.*layer2"):
         layer1.merge_state([layer2])
Exemple #14
0
 def test_output_shape(self):
   input_data = keras.Input(batch_size=16, shape=(4,), dtype=dtypes.string)
   layer = discretization.Discretization(bin_boundaries=[-.5, 0.5, 1.5])
   output = layer(input_data)
   self.assertAllEqual(output.shape.as_list(), [16, 4])