@@ -116,7 +116,7 @@ if __name__ == "__main__": | |||
noise_mech = NoiseMechanismsFactory().create(cfg.noise_mechanisms, | |||
norm_bound=cfg.norm_bound, | |||
initial_noise_multiplier=cfg.initial_noise_multiplier, | |||
noise_update=None) | |||
decay_policy=None) | |||
# Create a factory class of clip mechanisms, this method is to adaptive clip | |||
# gradients while training, decay_policy support 'Linear' and 'Geometric', | |||
# learning_rate is the learning rate to update clip_norm, | |||
@@ -115,7 +115,7 @@ if __name__ == "__main__": | |||
noise_mech = NoiseMechanismsFactory().create(cfg.noise_mechanisms, | |||
norm_bound=cfg.norm_bound, | |||
initial_noise_multiplier=cfg.initial_noise_multiplier, | |||
noise_update='Exp') | |||
decay_policy='Exp') | |||
net_opt = nn.Momentum(params=network.trainable_params(), | |||
learning_rate=cfg.lr, momentum=cfg.momentum) | |||
@@ -111,7 +111,7 @@ if __name__ == "__main__": | |||
dp_opt.set_mechanisms(cfg.noise_mechanisms, | |||
norm_bound=cfg.norm_bound, | |||
initial_noise_multiplier=cfg.initial_noise_multiplier, | |||
noise_update='Exp') | |||
decay_policy='Exp') | |||
# Create a factory class of clip mechanisms, this method is to adaptive clip | |||
# gradients while training, decay_policy support 'Linear' and 'Geometric', | |||
# learning_rate is the learning rate to update clip_norm, | |||
@@ -83,7 +83,7 @@ class NoiseMechanismsFactory: | |||
@staticmethod | |||
def create(mech_name='Gaussian', norm_bound=0.5, initial_noise_multiplier=1.5, seed=0, noise_decay_rate=6e-6, | |||
noise_update=None): | |||
decay_policy=None): | |||
""" | |||
Args: | |||
mech_name(str): Noise generated strategy, could be 'Gaussian' or | |||
@@ -97,7 +97,7 @@ class NoiseMechanismsFactory: | |||
random number. IF seed!=0 random normal will generate values using | |||
given seed. | |||
noise_decay_rate(float): Hyper parameter for controlling the noise decay. | |||
noise_update(str): Mechanisms parameters update policy. Default: None, no | |||
decay_policy(str): Mechanisms parameters update policy. Default: None, no | |||
parameters need update. | |||
Raises: | |||
@@ -141,13 +141,13 @@ class NoiseMechanismsFactory: | |||
return NoiseGaussianRandom(norm_bound=norm_bound, | |||
initial_noise_multiplier=initial_noise_multiplier, | |||
seed=seed, | |||
noise_update=noise_update) | |||
decay_policy=decay_policy) | |||
if mech_name == 'AdaGaussian': | |||
return NoiseAdaGaussianRandom(norm_bound=norm_bound, | |||
initial_noise_multiplier=initial_noise_multiplier, | |||
seed=seed, | |||
noise_decay_rate=noise_decay_rate, | |||
noise_update=noise_update) | |||
decay_policy=decay_policy) | |||
raise NameError("The {} is not implement, please choose " | |||
"['Gaussian', 'AdaGaussian']".format(mech_name)) | |||
@@ -176,7 +176,7 @@ class NoiseGaussianRandom(_Mechanisms): | |||
seed(int): Original random seed, if seed=0 random normal will use secure | |||
random number. IF seed!=0 random normal will generate values using | |||
given seed. | |||
noise_update(str): Mechanisms parameters update policy. Default: None. | |||
decay_policy(str): Mechanisms parameters update policy. Default: None. | |||
Returns: | |||
Tensor, generated noise with shape like given gradients. | |||
@@ -186,13 +186,13 @@ class NoiseGaussianRandom(_Mechanisms): | |||
>>> norm_bound = 0.5 | |||
>>> initial_noise_multiplier = 1.5 | |||
>>> seed = 0 | |||
>>> noise_update = None | |||
>>> net = NoiseGaussianRandom(norm_bound, initial_noise_multiplier, seed, noise_update) | |||
>>> decay_policy = None | |||
>>> net = NoiseGaussianRandom(norm_bound, initial_noise_multiplier, seed, decay_policy) | |||
>>> res = net(gradients) | |||
>>> print(res) | |||
""" | |||
def __init__(self, norm_bound, initial_noise_multiplier, seed, noise_update=None): | |||
def __init__(self, norm_bound, initial_noise_multiplier, seed, decay_policy=None): | |||
super(NoiseGaussianRandom, self).__init__() | |||
self._norm_bound = check_value_positive('norm_bound', norm_bound) | |||
self._norm_bound = Tensor(norm_bound, mstype.float32) | |||
@@ -200,9 +200,9 @@ class NoiseGaussianRandom(_Mechanisms): | |||
initial_noise_multiplier) | |||
self._initial_noise_multiplier = Tensor(initial_noise_multiplier, mstype.float32) | |||
self._mean = Tensor(0, mstype.float32) | |||
if noise_update is not None: | |||
raise ValueError('noise_update must be None in GaussianRandom class, but got {}.'.format(noise_update)) | |||
self._noise_update = noise_update | |||
if decay_policy is not None: | |||
raise ValueError('decay_policy must be None in GaussianRandom class, but got {}.'.format(decay_policy)) | |||
self._decay_policy = decay_policy | |||
self._seed = seed | |||
def construct(self, gradients): | |||
@@ -237,7 +237,7 @@ class NoiseAdaGaussianRandom(NoiseGaussianRandom): | |||
random number. IF seed!=0 random normal will generate values using | |||
given seed. | |||
noise_decay_rate(float): Hyper parameter for controlling the noise decay. | |||
noise_update(str): Noise decay strategy include 'Step', 'Time', 'Exp'. | |||
decay_policy(str): Noise decay strategy include 'Step', 'Time', 'Exp'. | |||
Returns: | |||
Tensor, generated noise with shape like given gradients. | |||
@@ -248,13 +248,13 @@ class NoiseAdaGaussianRandom(NoiseGaussianRandom): | |||
>>> initial_noise_multiplier = 1.5 | |||
>>> seed = 0 | |||
>>> noise_decay_rate = 6e-4 | |||
>>> noise_update = "Time" | |||
>>> net = NoiseAdaGaussianRandom(norm_bound, initial_noise_multiplier, seed, noise_decay_rate, noise_update) | |||
>>> decay_policy = "Time" | |||
>>> net = NoiseAdaGaussianRandom(norm_bound, initial_noise_multiplier, seed, noise_decay_rate, decay_policy) | |||
>>> res = net(gradients) | |||
>>> print(res) | |||
""" | |||
def __init__(self, norm_bound, initial_noise_multiplier, seed, noise_decay_rate, noise_update): | |||
def __init__(self, norm_bound, initial_noise_multiplier, seed, noise_decay_rate, decay_policy): | |||
super(NoiseAdaGaussianRandom, self).__init__(norm_bound=norm_bound, | |||
initial_noise_multiplier=initial_noise_multiplier, | |||
seed=seed) | |||
@@ -263,10 +263,10 @@ class NoiseAdaGaussianRandom(NoiseGaussianRandom): | |||
noise_decay_rate = check_param_type('noise_decay_rate', noise_decay_rate, float) | |||
check_param_in_range('noise_decay_rate', noise_decay_rate, 0.0, 1.0) | |||
self._noise_decay_rate = Tensor(noise_decay_rate, mstype.float32) | |||
if noise_update not in ['Time', 'Step', 'Exp']: | |||
raise NameError("The noise_update must be in ['Time', 'Step', 'Exp'], but " | |||
"get {}".format(noise_update)) | |||
self._noise_update = noise_update | |||
if decay_policy not in ['Time', 'Step', 'Exp']: | |||
raise NameError("The decay_policy must be in ['Time', 'Step', 'Exp'], but " | |||
"get {}".format(decay_policy)) | |||
self._decay_policy = decay_policy | |||
class _MechanismsParamsUpdater(Cell): | |||
@@ -274,7 +274,7 @@ class _MechanismsParamsUpdater(Cell): | |||
Update mechanisms parameters, the parameters will refresh in train period. | |||
Args: | |||
noise_update(str): Pass in by the mechanisms class, mechanisms parameters | |||
decay_policy(str): Pass in by the mechanisms class, mechanisms parameters | |||
update policy. | |||
decay_rate(Tensor): Pass in by the mechanisms class, hyper parameter for | |||
controlling the decay size. | |||
@@ -286,9 +286,9 @@ class _MechanismsParamsUpdater(Cell): | |||
Returns: | |||
Tuple, next params value. | |||
""" | |||
def __init__(self, noise_update, decay_rate, cur_noise_multiplier, init_noise_multiplier): | |||
def __init__(self, decay_policy, decay_rate, cur_noise_multiplier, init_noise_multiplier): | |||
super(_MechanismsParamsUpdater, self).__init__() | |||
self._noise_update = noise_update | |||
self._decay_policy = decay_policy | |||
self._decay_rate = decay_rate | |||
self._cur_noise_multiplier = cur_noise_multiplier | |||
self._init_noise_multiplier = init_noise_multiplier | |||
@@ -308,12 +308,12 @@ class _MechanismsParamsUpdater(Cell): | |||
Returns: | |||
Tuple, next step parameters value. | |||
""" | |||
if self._noise_update == 'Time': | |||
if self._decay_policy == 'Time': | |||
temp = self._div(self._init_noise_multiplier, self._cur_noise_multiplier) | |||
temp = self._add(temp, self._decay_rate) | |||
next_noise_multiplier = self._assign(self._cur_noise_multiplier, | |||
self._div(self._init_noise_multiplier, temp)) | |||
elif self._noise_update == 'Step': | |||
elif self._decay_policy == 'Step': | |||
temp = self._sub(self._one, self._decay_rate) | |||
next_noise_multiplier = self._assign(self._cur_noise_multiplier, | |||
self._mul(temp, self._cur_noise_multiplier)) | |||
@@ -127,8 +127,8 @@ class DPOptimizerClassFactory: | |||
self._micro_float = Tensor(micro_batches, mstype.float32) | |||
self._mech_param_updater = None | |||
if self._mech is not None and self._mech._noise_update is not None: | |||
self._mech_param_updater = _MechanismsParamsUpdater(noise_update=self._mech._noise_update, | |||
if self._mech is not None and self._mech._decay_policy is not None: | |||
self._mech_param_updater = _MechanismsParamsUpdater(decay_policy=self._mech._decay_policy, | |||
decay_rate=self._mech._noise_decay_rate, | |||
cur_noise_multiplier= | |||
self._mech._noise_multiplier, | |||
@@ -432,9 +432,9 @@ class _TrainOneStepWithLossScaleCell(Cell): | |||
self._cast = P.Cast() | |||
self._noise_mech_param_updater = None | |||
if self._noise_mech is not None and self._noise_mech._noise_update is not None: | |||
if self._noise_mech is not None and self._noise_mech._decay_policy is not None: | |||
self._noise_mech_param_updater = _MechanismsParamsUpdater( | |||
noise_update=self._noise_mech._noise_update, | |||
decay_policy=self._noise_mech._decay_policy, | |||
decay_rate=self._noise_mech._noise_decay_rate, | |||
cur_noise_multiplier= | |||
self._noise_mech._noise_multiplier, | |||
@@ -636,9 +636,9 @@ class _TrainOneStepCell(Cell): | |||
self._micro_float = Tensor(micro_batches, mstype.float32) | |||
self._noise_mech_param_updater = None | |||
if self._noise_mech is not None and self._noise_mech._noise_update is not None: | |||
if self._noise_mech is not None and self._noise_mech._decay_policy is not None: | |||
self._noise_mech_param_updater = _MechanismsParamsUpdater( | |||
noise_update=self._noise_mech._noise_update, | |||
decay_policy=self._noise_mech._decay_policy, | |||
decay_rate=self._noise_mech._noise_decay_rate, | |||
cur_noise_multiplier= | |||
self._noise_mech._noise_multiplier, | |||
@@ -18,7 +18,7 @@ from setuptools import setup | |||
from setuptools.command.egg_info import egg_info | |||
from setuptools.command.build_py import build_py | |||
version = '0.5.0' | |||
version = '0.6.0' | |||
cur_dir = os.path.dirname(os.path.realpath(__file__)) | |||
pkg_dir = os.path.join(cur_dir, 'build') | |||
@@ -35,7 +35,7 @@ def test_graph_factory(): | |||
norm_bound = 1.0 | |||
initial_noise_multiplier = 0.1 | |||
alpha = 0.5 | |||
noise_update = 'Step' | |||
decay_policy = 'Step' | |||
factory = NoiseMechanismsFactory() | |||
noise_mech = factory.create('Gaussian', | |||
norm_bound, | |||
@@ -46,7 +46,7 @@ def test_graph_factory(): | |||
norm_bound, | |||
initial_noise_multiplier, | |||
noise_decay_rate=alpha, | |||
noise_update=noise_update) | |||
decay_policy=decay_policy) | |||
ada_noise = ada_noise_mech(grad) | |||
print('ada noise: ', ada_noise) | |||
@@ -61,7 +61,7 @@ def test_pynative_factory(): | |||
norm_bound = 1.0 | |||
initial_noise_multiplier = 0.1 | |||
alpha = 0.5 | |||
noise_update = 'Step' | |||
decay_policy = 'Step' | |||
factory = NoiseMechanismsFactory() | |||
noise_mech = factory.create('Gaussian', | |||
norm_bound, | |||
@@ -72,7 +72,7 @@ def test_pynative_factory(): | |||
norm_bound, | |||
initial_noise_multiplier, | |||
noise_decay_rate=alpha, | |||
noise_update=noise_update) | |||
decay_policy=decay_policy) | |||
ada_noise = ada_noise_mech(grad) | |||
print('ada noise: ', ada_noise) | |||
@@ -87,7 +87,7 @@ def test_pynative_gaussian(): | |||
norm_bound = 1.0 | |||
initial_noise_multiplier = 0.1 | |||
alpha = 0.5 | |||
noise_update = 'Step' | |||
decay_policy = 'Step' | |||
factory = NoiseMechanismsFactory() | |||
noise_mech = factory.create('Gaussian', | |||
norm_bound, | |||
@@ -98,7 +98,7 @@ def test_pynative_gaussian(): | |||
norm_bound, | |||
initial_noise_multiplier, | |||
noise_decay_rate=alpha, | |||
noise_update=noise_update) | |||
decay_policy=decay_policy) | |||
ada_noise = ada_noise_mech(grad) | |||
print('ada noise: ', ada_noise) | |||
@@ -113,12 +113,12 @@ def test_graph_ada_gaussian(): | |||
norm_bound = 1.0 | |||
initial_noise_multiplier = 0.1 | |||
noise_decay_rate = 0.5 | |||
noise_update = 'Step' | |||
decay_policy = 'Step' | |||
ada_noise_mech = NoiseAdaGaussianRandom(norm_bound, | |||
initial_noise_multiplier, | |||
seed=0, | |||
noise_decay_rate=noise_decay_rate, | |||
noise_update=noise_update) | |||
decay_policy=decay_policy) | |||
res = ada_noise_mech(grad) | |||
print(res) | |||
@@ -133,12 +133,12 @@ def test_pynative_ada_gaussian(): | |||
norm_bound = 1.0 | |||
initial_noise_multiplier = 0.1 | |||
noise_decay_rate = 0.5 | |||
noise_update = 'Step' | |||
decay_policy = 'Step' | |||
ada_noise_mech = NoiseAdaGaussianRandom(norm_bound, | |||
initial_noise_multiplier, | |||
seed=0, | |||
noise_decay_rate=noise_decay_rate, | |||
noise_update=noise_update) | |||
decay_policy=decay_policy) | |||
res = ada_noise_mech(grad) | |||
print(res) | |||
@@ -153,13 +153,13 @@ def test_graph_exponential(): | |||
norm_bound = 1.0 | |||
initial_noise_multiplier = 0.1 | |||
alpha = 0.5 | |||
noise_update = 'Exp' | |||
decay_policy = 'Exp' | |||
factory = NoiseMechanismsFactory() | |||
ada_noise = factory.create('AdaGaussian', | |||
norm_bound, | |||
initial_noise_multiplier, | |||
noise_decay_rate=alpha, | |||
noise_update=noise_update) | |||
decay_policy=decay_policy) | |||
ada_noise = ada_noise(grad) | |||
print('ada noise: ', ada_noise) | |||
@@ -174,13 +174,13 @@ def test_pynative_exponential(): | |||
norm_bound = 1.0 | |||
initial_noise_multiplier = 0.1 | |||
alpha = 0.5 | |||
noise_update = 'Exp' | |||
decay_policy = 'Exp' | |||
factory = NoiseMechanismsFactory() | |||
ada_noise = factory.create('AdaGaussian', | |||
norm_bound, | |||
initial_noise_multiplier, | |||
noise_decay_rate=alpha, | |||
noise_update=noise_update) | |||
decay_policy=decay_policy) | |||
ada_noise = ada_noise(grad) | |||
print('ada noise: ', ada_noise) | |||
@@ -136,7 +136,7 @@ def test_dp_model_with_graph_mode_ada_gaussian(): | |||
norm_bound=norm_bound, | |||
initial_noise_multiplier=initial_noise_multiplier, | |||
noise_decay_rate=alpha, | |||
noise_update='Exp') | |||
decay_policy='Exp') | |||
clip_mech = None | |||
net_opt = nn.Momentum(network.trainable_params(), learning_rate=0.1, | |||
momentum=0.9) | |||