Example #1
0
    def test_bernoulli(self):
        for size in [(10,), (10, 10), (10, 10, 10)]:
            probs = torch.rand(size)
            randvec = crypten.bernoulli(probs)
            self.assertTrue(randvec.size() == size, "Incorrect size")
            tensor = randvec.get_plain_text()
            self.assertTrue(((tensor == 0) + (tensor == 1)).all(), "Invalid values")

        probs = torch.Tensor(int(1e4)).fill_(0.2)
        randvec = crypten.bernoulli(probs).get_plain_text()
        frac_zero = float((randvec == 0).sum()) / randvec.nelement()
        self.assertTrue(math.isclose(frac_zero, 0.8, rel_tol=1e-1, abs_tol=1e-1))
Example #2
0
    def _process_targets(self, targets):
        """Encrypts targets and RR to targets if necessary"""
        if self.rr_prob is not None:
            flip_probs = torch.tensor(self.rr_prob).expand(targets.size())

        # Apply appropriate RR-protocol and encrypt targets if necessary
        if self.rr_prob is not None:
            flip_probs = torch.tensor(self.rr_prob).expand(targets.size())

        if crypten.is_encrypted_tensor(targets):
            if self.rr_prob is not None:
                flip_mask = crypten.bernoulli(flip_probs)
                targets = targets + flip_probs - 2 * flip_mask * targets
            targets_enc = targets
        else:
            # Label provider adds RR label flips if they are plaintext
            if self.rr_prob is not None and self.is_label_src():
                flip_mask = flip_probs.bernoulli()
                targets += flip_mask - 2 * targets * flip_mask

            # Encrypt targets:
            targets_enc = crypten.cryptensor(targets, src=self.label_src)

        return targets_enc
Example #3
0
 def score_func(scores, A_inv, b, context):
     explore = crypten.bernoulli(torch.tensor([epsilon]))
     rand_scores = crypten.rand(*scores.size())
     scores.mul_(1 - explore).add_(rand_scores.mul(explore))