コード例 #1
0
 def test_gaussian_sum_no_clip_no_noise(self):
     record1 = torch.tensor([2.0, 0.0])
     record2 = torch.tensor([-1.0, 1.0])
     query = gaussian_query.GaussianSumQuery(l2_norm_clip=10.0, stddev=0.0)
     query_result, _ = run_query(query, [record1, record2])
     expected = np.asarray([1.0, 1.0])
     assert_allclose(query_result, expected)
コード例 #2
0
    def test_gaussian_sum_with_clip_no_noise(self):
        record1 = torch.tensor([-6.0, 8.0])  # Clipped to [-3.0, 4.0].
        record2 = torch.tensor([4.0, -3.0])  # Not clipped.

        query = gaussian_query.GaussianSumQuery(l2_norm_clip=5.0, stddev=0.0)
        query_result, _ = run_query(query, [record1, record2])
        expected = np.asarray([1.0, 1.0])
        assert_allclose(query_result, expected)
コード例 #3
0
 def get_sample_state(records):
     query = gaussian_query.GaussianSumQuery(l2_norm_clip=10.0,
                                             stddev=1.0)
     global_state = query.initial_global_state()
     params = query.derive_sample_params(global_state)
     sample_state = query.initial_sample_state(records[0])
     for record in records:
         sample_state = query.accumulate_record(params, sample_state,
                                                record)
     return sample_state
コード例 #4
0
    def test_gaussian_sum_with_noise(self):
        record1, record2 = 2.71828, 3.14159
        stddev = 1.0

        query = gaussian_query.GaussianSumQuery(l2_norm_clip=5.0,
                                                stddev=stddev)
        query_result, _ = run_query(query, torch.tensor([record1, record2]))

        noised_sums = []
        for _ in xrange(1000):
            noised_sums.append(query_result)

        result_stddev = np.std(noised_sums)
        assert_near(result_stddev, stddev, 0.1)
コード例 #5
0
    def test_gaussian_sum_merge(self):
        records1 = [torch.tensor([2.0, 0.0]), torch.tensor([-1.0, 1.0])]
        records2 = [torch.tensor([3.0, 5.0]), torch.tensor([-1.0, 4.0])]

        def get_sample_state(records):
            query = gaussian_query.GaussianSumQuery(l2_norm_clip=10.0,
                                                    stddev=1.0)
            global_state = query.initial_global_state()
            params = query.derive_sample_params(global_state)
            sample_state = query.initial_sample_state(records[0])
            for record in records:
                sample_state = query.accumulate_record(params, sample_state,
                                                       record)
            return sample_state

        sample_state_1 = get_sample_state(records1)
        sample_state_2 = get_sample_state(records2)

        merged = gaussian_query.GaussianSumQuery(
            10.0, 1.0).merge_sample_states(sample_state_1, sample_state_2)

        expected = np.asarray([3.0, 10.0])
        assert_allclose(merged, expected)