Beispiel #1
0
  def test_average_no_noise(self):
    record1 = tf.constant([5.0, 0.0])   # Clipped to [3.0, 0.0].
    record2 = tf.constant([-1.0, 2.0])  # Not clipped.

    query = quantile_adaptive_clip_sum_query.QuantileAdaptiveClipAverageQuery(
        initial_l2_norm_clip=3.0,
        noise_multiplier=0.0,
        denominator=2.0,
        target_unclipped_quantile=1.0,
        learning_rate=0.0,
        clipped_count_stddev=0.0,
        expected_num_records=2.0)
    query_result, _ = test_utils.run_query(query, [record1, record2])
    result = query_result.numpy()
    expected_average = [1.0, 1.0]
    self.assertAllClose(result, expected_average)
Beispiel #2
0
  def test_average_with_noise(self):
    record1, record2 = 2.71828, 3.14159
    sum_stddev = 1.0
    denominator = 2.0
    clip = 3.0

    query = quantile_adaptive_clip_sum_query.QuantileAdaptiveClipAverageQuery(
        initial_l2_norm_clip=clip,
        noise_multiplier=sum_stddev / clip,
        denominator=denominator,
        target_unclipped_quantile=1.0,
        learning_rate=0.0,
        clipped_count_stddev=0.0,
        expected_num_records=2.0)

    noised_averages = []
    for _ in range(1000):
      query_result, _ = test_utils.run_query(query, [record1, record2])
      noised_averages.append(query_result.numpy())

    result_stddev = np.std(noised_averages)
    avg_stddev = sum_stddev / denominator
    self.assertNear(result_stddev, avg_stddev, 0.1)