in utils/optimizer.py [0:0]
def create_privacy_engine(model, params, n_data):
if params.private:
if params.noise_multiplier is None:
_n_data = n_data# if params.privacy_fake_samples is None else params.privacy_fake_samples
sample_rate = params.batch_size / _n_data
steps = params.epochs * _n_data / params.batch_size
params.noise_multiplier = getNoiseMultiplier(params.privacy_epsilon, params.privacy_delta, sample_rate, steps)
if params.max_grad_norm == "mean":
max_grad_norm = 1.0
else:
max_grad_norm = params.max_grad_norm
else:
max_grad_norm = float("inf")
params.noise_multiplier = 0
if params.private or params.log_gradients:
if params.log_gradients and not params.private:
logger.info("Creating privacy engine to compute per sample gradients and log them.")
privacy_engine = PrivacyEngine(
model,
batch_size=params.batch_size,
sample_size=n_data,
alphas=PRIVACY_ALPHAS,
noise_multiplier=params.noise_multiplier,
max_grad_norm=max_grad_norm
)
else:
privacy_engine = None
return privacy_engine