in crypten/nn/privacy/dp_split.py [0: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