Merge pull request !374 from 张澍坤/mastertags/v1.8.0
@@ -306,6 +306,7 @@ mindarmour.adv_robustness.detectors | |||||
- **max_k_neighbor** (int) - 最近邻的最大数量。默认值:1000。 | - **max_k_neighbor** (int) - 最近邻的最大数量。默认值:1000。 | ||||
- **chunk_size** (int) - 缓冲区大小。默认值:1000。 | - **chunk_size** (int) - 缓冲区大小。默认值:1000。 | ||||
- **max_buffer_size** (int) - 最大缓冲区大小。默认值:10000。默认值:False。 | - **max_buffer_size** (int) - 最大缓冲区大小。默认值:10000。默认值:False。 | ||||
- **tuning** (bool) - 计算k个最近邻的平均距离,如果'tuning'为true,k=K。如果为False,k=1,...,K。默认值:False。 | |||||
- **fpr** (float) - 合法查询序列上的误报率。默认值:0.001 | - **fpr** (float) - 合法查询序列上的误报率。默认值:0.001 | ||||
.. py:method:: clear_buffer() | .. py:method:: clear_buffer() | ||||
@@ -179,6 +179,7 @@ mindarmour.adv_robustness.evaluations | |||||
**参数:** | **参数:** | ||||
- **metrics_name** (Union[tuple, list]) - 要显示的度量名称数组。每组值对应一条雷达曲线。 | - **metrics_name** (Union[tuple, list]) - 要显示的度量名称数组。每组值对应一条雷达曲线。 | ||||
- **metrics_data** (numpy.ndarray) - 多个雷达曲线的每个度量的(归一化)值,如[[0.5, 0.8, ...], [0.2,0.6,...], ...]。 | |||||
- **labels** (Union[tuple, list]) - 所有雷达曲线的图例。 | - **labels** (Union[tuple, list]) - 所有雷达曲线的图例。 | ||||
- **title** (str) - 图表的标题。 | - **title** (str) - 图表的标题。 | ||||
- **scale** (str) - 用于调整轴刻度的标量,如'hide'、'norm'、'sparse'、'dense'。默认值:'hide'。 | - **scale** (str) - 用于调整轴刻度的标量,如'hide'、'norm'、'sparse'、'dense'。默认值:'hide'。 | ||||
@@ -7,7 +7,8 @@ mindarmour.privacy.sup_privacy | |||||
周期性检查抑制隐私功能状态和切换(启动/关闭)抑制操作。 | 周期性检查抑制隐私功能状态和切换(启动/关闭)抑制操作。 | ||||
详情请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_。 | |||||
详情请查看: `应用抑制隐私机制保护用户隐私 | |||||
<https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_。 | |||||
**参数:** | **参数:** | ||||
@@ -26,7 +27,7 @@ mindarmour.privacy.sup_privacy | |||||
完整的模型训练功能。抑制隐私函数嵌入到重载的mindspore.train.model.Model中。 | 完整的模型训练功能。抑制隐私函数嵌入到重载的mindspore.train.model.Model中。 | ||||
有关详细信息,请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html>`_。 | |||||
有关详细信息,请查看: `应用抑制隐私机制保护用户隐私 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html>`_。 | |||||
**参数:** | **参数:** | ||||
@@ -47,7 +48,7 @@ mindarmour.privacy.sup_privacy | |||||
SuppressCtrl机制的工厂类。 | SuppressCtrl机制的工厂类。 | ||||
详情请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_。 | |||||
详情请查看: `应用抑制隐私机制保护用户隐私 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_。 | |||||
.. py:method:: create(networks, mask_layers, policy='local_train', end_epoch=10, batch_num=20, start_epoch=3, mask_times=1000, lr=0.05, sparse_end=0.90, sparse_start=0.0) | .. py:method:: create(networks, mask_layers, policy='local_train', end_epoch=10, batch_num=20, start_epoch=3, mask_times=1000, lr=0.05, sparse_end=0.90, sparse_start=0.0) | ||||
@@ -72,7 +73,7 @@ mindarmour.privacy.sup_privacy | |||||
完成抑制隐私操作,包括计算抑制比例,找到应该抑制的参数,并永久抑制这些参数。 | 完成抑制隐私操作,包括计算抑制比例,找到应该抑制的参数,并永久抑制这些参数。 | ||||
详情请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_。 | |||||
详情请查看: `应用抑制隐私机制保护用户隐私 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_。 | |||||
**参数:** | **参数:** | ||||
@@ -7,7 +7,7 @@ MindArmour的可靠性方法。 | |||||
故障注入模块模拟深度神经网络的各种故障场景,并评估模型的性能和可靠性。 | 故障注入模块模拟深度神经网络的各种故障场景,并评估模型的性能和可靠性。 | ||||
详情请查看 `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/fault_injection.html>`_。 | |||||
详情请查看 `实现模型故障注入评估模型容错性 <https://mindspore.cn/mindarmour/docs/zh-CN/master/fault_injection.html>`_。 | |||||
**参数:** | **参数:** | ||||
@@ -41,7 +41,8 @@ MindArmour的可靠性方法。 | |||||
.. py:class:: mindarmour.reliability.ConceptDriftCheckTimeSeries(window_size=100, rolling_window=10, step=10, threshold_index=1.5, need_label=False) | .. py:class:: mindarmour.reliability.ConceptDriftCheckTimeSeries(window_size=100, rolling_window=10, step=10, threshold_index=1.5, need_label=False) | ||||
概念漂移检查时间序列(ConceptDriftCheckTimeSeries)用于样本序列分布变化检测。 | 概念漂移检查时间序列(ConceptDriftCheckTimeSeries)用于样本序列分布变化检测。 | ||||
有关详细信息,请查看 `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/concept_drift_time_series.html>`_。 | |||||
有关详细信息,请查看 `实现时序数据概念漂移检测应用 | |||||
<https://mindspore.cn/mindarmour/docs/zh-CN/master/concept_drift_time_series.html>`_。 | |||||
**参数:** | **参数:** | ||||
@@ -106,7 +107,7 @@ MindArmour的可靠性方法。 | |||||
训练OOD检测器。提取训练数据特征,得到聚类中心。测试数据特征与聚类中心之间的距离确定图像是否为分布外(OOD)图像。 | 训练OOD检测器。提取训练数据特征,得到聚类中心。测试数据特征与聚类中心之间的距离确定图像是否为分布外(OOD)图像。 | ||||
有关详细信息,请查看 `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/concept_drift_images.html>`_。 | |||||
有关详细信息,请查看 `实现图像数据概念漂移检测应用 <https://mindspore.cn/mindarmour/docs/zh-CN/master/concept_drift_images.html>`_。 | |||||
**参数:** | **参数:** | ||||
@@ -223,7 +223,7 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 | |||||
这个类就是重载Mindpore.train.model.Model。 | 这个类就是重载Mindpore.train.model.Model。 | ||||
详情请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_。 | |||||
详情请查看: `应用差分隐私机制保护用户隐私 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_。 | |||||
**参数:** | **参数:** | ||||
@@ -241,7 +241,7 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 | |||||
成员推理是由Shokri、Stronati、Song和Shmatikov提出的一种用于推测用户隐私数据的灰盒攻击。它需要训练样本的loss或logits结果。(隐私是指单个用户的一些敏感属性)。 | 成员推理是由Shokri、Stronati、Song和Shmatikov提出的一种用于推测用户隐私数据的灰盒攻击。它需要训练样本的loss或logits结果。(隐私是指单个用户的一些敏感属性)。 | ||||
有关详细信息,请参见:`教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/test_model_security_membership_inference.html>`_。 | |||||
有关详细信息,请参见:`使用成员推理测试模型安全性 <https://mindspore.cn/mindarmour/docs/zh-CN/master/test_model_security_membership_inference.html>`_。 | |||||
参考文献:`Reza Shokri, Marco Stronati, Congzheng Song, Vitaly Shmatikov. Membership Inference Attacks against Machine Learning Models. 2017. <https://arxiv.org/abs/1610.05820v2>`_。 | 参考文献:`Reza Shokri, Marco Stronati, Congzheng Song, Vitaly Shmatikov. Membership Inference Attacks against Machine Learning Models. 2017. <https://arxiv.org/abs/1610.05820v2>`_。 | ||||
@@ -340,7 +340,8 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 | |||||
根据target_features重建图像。 | 根据target_features重建图像。 | ||||
**参数:** | **参数:** | ||||
- **target_features** (numpy.ndarray) - 原始图像的深度表示。 `target_features` 的第一个维度应该是img_num。 | |||||
需要注意的是,如果img_num等于1,则target_features的形状应该是(1, dim2, dim3, ...)。 | |||||
- **iters** (int) - 逆向攻击的迭代次数,应为正整数。默认值:100。 | - **iters** (int) - 逆向攻击的迭代次数,应为正整数。默认值:100。 | ||||
**返回:** | **返回:** | ||||
@@ -356,7 +357,7 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 | |||||
概念漂移检查时间序列(ConceptDriftCheckTimeSeries)用于样本序列分布变化检测。 | 概念漂移检查时间序列(ConceptDriftCheckTimeSeries)用于样本序列分布变化检测。 | ||||
有关详细信息,请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/concept_drift_time_series.html>`_。 | |||||
有关详细信息,请查看: `实现时序数据概念漂移检测应用 <https://mindspore.cn/mindarmour/docs/zh-CN/master/concept_drift_time_series.html>`_。 | |||||
**参数:** | **参数:** | ||||
@@ -77,8 +77,19 @@ class HopSkipJumpAttack(Attack): | |||||
Examples: | Examples: | ||||
>>> from mindspore import Tensor | >>> from mindspore import Tensor | ||||
>>> from mindarmour import BlackModel | >>> from mindarmour import BlackModel | ||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.attacks import HopSkipJumpAttack | >>> from mindarmour.adv_robustness.attacks import HopSkipJumpAttack | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._reduce = P.ReduceSum() | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._reduce(out, 2) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> class ModelToBeAttacked(BlackModel): | >>> class ModelToBeAttacked(BlackModel): | ||||
... def __init__(self, network): | ... def __init__(self, network): | ||||
... super(ModelToBeAttacked, self).__init__() | ... super(ModelToBeAttacked, self).__init__() | ||||
@@ -81,15 +81,26 @@ class NES(Attack): | |||||
Examples: | Examples: | ||||
>>> from mindspore import Tensor | >>> from mindspore import Tensor | ||||
>>> from mindarmour import BlackModel | >>> from mindarmour import BlackModel | ||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.attacks import NES | >>> from mindarmour.adv_robustness.attacks import NES | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._reduce = P.ReduceSum() | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._reduce(out, 2) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> class ModelToBeAttacked(BlackModel): | >>> class ModelToBeAttacked(BlackModel): | ||||
... def __init__(self, network): | ... def __init__(self, network): | ||||
... super(ModelToBeAttacked, self).__init__() | ... super(ModelToBeAttacked, self).__init__() | ||||
... self._network = network | ... self._network = network | ||||
... def predict(self, inputs): | ... def predict(self, inputs): | ||||
... if len(inputs.shape) == 3: | |||||
... inputs = inputs[np.newaxis, :] | |||||
... if len(inputs.shape) == 1: | |||||
... inputs = np.expand_dims(inputs, axis=0) | |||||
... result = self._network(Tensor(inputs.astype(np.float32))) | ... result = self._network(Tensor(inputs.astype(np.float32))) | ||||
... return result.asnumpy() | ... return result.asnumpy() | ||||
>>> net = Net() | >>> net = Net() | ||||
@@ -49,8 +49,19 @@ class PointWiseAttack(Attack): | |||||
Examples: | Examples: | ||||
>>> from mindspore import Tensor | >>> from mindspore import Tensor | ||||
>>> from mindarmour import BlackModel | >>> from mindarmour import BlackModel | ||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.attacks import PointWiseAttack | >>> from mindarmour.adv_robustness.attacks import PointWiseAttack | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._reduce = P.ReduceSum() | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._reduce(out, 2) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> class ModelToBeAttacked(BlackModel): | >>> class ModelToBeAttacked(BlackModel): | ||||
... def __init__(self, network): | ... def __init__(self, network): | ||||
... super(ModelToBeAttacked, self).__init__() | ... super(ModelToBeAttacked, self).__init__() | ||||
@@ -42,13 +42,26 @@ class SaltAndPepperNoiseAttack(Attack): | |||||
Examples: | Examples: | ||||
>>> from mindspore import Tensor | >>> from mindspore import Tensor | ||||
>>> from mindarmour import BlackModel | >>> from mindarmour import BlackModel | ||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.attacks import SaltAndPepperNoiseAttack | >>> from mindarmour.adv_robustness.attacks import SaltAndPepperNoiseAttack | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._reduce = P.ReduceSum() | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._reduce(out, 2) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> class ModelToBeAttacked(BlackModel): | >>> class ModelToBeAttacked(BlackModel): | ||||
... def __init__(self, network): | ... def __init__(self, network): | ||||
... super(ModelToBeAttacked, self).__init__() | ... super(ModelToBeAttacked, self).__init__() | ||||
... self._network = network | ... self._network = network | ||||
... def predict(self, inputs): | ... def predict(self, inputs): | ||||
... if len(inputs.shape) == 1: | |||||
... inputs = np.expand_dims(inputs, axis=0) | |||||
... result = self._network(Tensor(inputs.astype(np.float32))) | ... result = self._network(Tensor(inputs.astype(np.float32))) | ||||
... return result.asnumpy() | ... return result.asnumpy() | ||||
>>> net = Net() | >>> net = Net() | ||||
@@ -97,13 +97,12 @@ class CarliniWagnerL2Attack(Attack): | |||||
input labels are onehot-coded. Default: True. | input labels are onehot-coded. Default: True. | ||||
Examples: | Examples: | ||||
>>> import mindspore.ops.operations as M | |||||
>>> from mindspore.nn import Cell | |||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.attacks import CarliniWagnerL2Attack | >>> from mindarmour.adv_robustness.attacks import CarliniWagnerL2Attack | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._softmax = M.Softmax() | |||||
... self._softmax = P.Softmax() | |||||
... def construct(self, inputs): | ... def construct(self, inputs): | ||||
... out = self._softmax(inputs) | ... out = self._softmax(inputs) | ||||
... return out | ... return out | ||||
@@ -118,10 +118,9 @@ class DeepFool(Attack): | |||||
Examples: | Examples: | ||||
>>> import mindspore.ops.operations as P | >>> import mindspore.ops.operations as P | ||||
>>> from mindspore.nn import Cell | |||||
>>> from mindspore import Tensor | >>> from mindspore import Tensor | ||||
>>> from mindarmour.adv_robustness.attacks import DeepFool | >>> from mindarmour.adv_robustness.attacks import DeepFool | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._softmax = P.Softmax() | ... self._softmax = P.Softmax() | ||||
@@ -149,9 +149,8 @@ class FastGradientMethod(GradientMethod): | |||||
is already equipped with loss function. Default: None. | is already equipped with loss function. Default: None. | ||||
Examples: | Examples: | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import FastGradientMethod | >>> from mindarmour.adv_robustness.attacks import FastGradientMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._relu = nn.ReLU() | ... self._relu = nn.ReLU() | ||||
@@ -162,7 +161,7 @@ class FastGradientMethod(GradientMethod): | |||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
>>> net = Net() | >>> net = Net() | ||||
>>> attack = FastGradientMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = FastGradientMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> adv_x = attack.generate(inputs, labels) | >>> adv_x = attack.generate(inputs, labels) | ||||
""" | """ | ||||
@@ -230,9 +229,8 @@ class RandomFastGradientMethod(FastGradientMethod): | |||||
ValueError: eps is smaller than alpha! | ValueError: eps is smaller than alpha! | ||||
Examples: | Examples: | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import RandomFastGradientMethod | >>> from mindarmour.adv_robustness.attacks import RandomFastGradientMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._relu = nn.ReLU() | ... self._relu = nn.ReLU() | ||||
@@ -243,7 +241,7 @@ class RandomFastGradientMethod(FastGradientMethod): | |||||
>>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | >>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | ||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
>>> attack = RandomFastGradientMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = RandomFastGradientMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> adv_x = attack.generate(inputs, labels) | >>> adv_x = attack.generate(inputs, labels) | ||||
""" | """ | ||||
@@ -283,9 +281,8 @@ class FastGradientSignMethod(GradientMethod): | |||||
is already equipped with loss function. Default: None. | is already equipped with loss function. Default: None. | ||||
Examples: | Examples: | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import FastGradientSignMethod | >>> from mindarmour.adv_robustness.attacks import FastGradientSignMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._relu = nn.ReLU() | ... self._relu = nn.ReLU() | ||||
@@ -296,7 +293,7 @@ class FastGradientSignMethod(GradientMethod): | |||||
>>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | >>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | ||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
>>> attack = FastGradientSignMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = FastGradientSignMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> adv_x = attack.generate(inputs, labels) | >>> adv_x = attack.generate(inputs, labels) | ||||
""" | """ | ||||
@@ -361,9 +358,8 @@ class RandomFastGradientSignMethod(FastGradientSignMethod): | |||||
ValueError: eps is smaller than alpha! | ValueError: eps is smaller than alpha! | ||||
Examples: | Examples: | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import RandomFastGradientSignMethod | >>> from mindarmour.adv_robustness.attacks import RandomFastGradientSignMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._relu = nn.ReLU() | ... self._relu = nn.ReLU() | ||||
@@ -374,7 +370,7 @@ class RandomFastGradientSignMethod(FastGradientSignMethod): | |||||
>>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | >>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | ||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
>>> attack = RandomFastGradientSignMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = RandomFastGradientSignMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> adv_x = attack.generate(inputs, labels) | >>> adv_x = attack.generate(inputs, labels) | ||||
""" | """ | ||||
@@ -410,9 +406,8 @@ class LeastLikelyClassMethod(FastGradientSignMethod): | |||||
is already equipped with loss function. Default: None. | is already equipped with loss function. Default: None. | ||||
Examples: | Examples: | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import LeastLikelyClassMethod | >>> from mindarmour.adv_robustness.attacks import LeastLikelyClassMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._relu = nn.ReLU() | ... self._relu = nn.ReLU() | ||||
@@ -423,7 +418,7 @@ class LeastLikelyClassMethod(FastGradientSignMethod): | |||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
>>> net = Net() | >>> net = Net() | ||||
>>> attack = LeastLikelyClassMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = LeastLikelyClassMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> adv_x = attack.generate(inputs, labels) | >>> adv_x = attack.generate(inputs, labels) | ||||
""" | """ | ||||
@@ -462,9 +457,8 @@ class RandomLeastLikelyClassMethod(FastGradientSignMethod): | |||||
ValueError: eps is smaller than alpha! | ValueError: eps is smaller than alpha! | ||||
Examples: | Examples: | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import RandomLeastLikelyClassMethod | >>> from mindarmour.adv_robustness.attacks import RandomLeastLikelyClassMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._relu = nn.ReLU() | ... self._relu = nn.ReLU() | ||||
@@ -475,7 +469,7 @@ class RandomLeastLikelyClassMethod(FastGradientSignMethod): | |||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
>>> net = Net() | >>> net = Net() | ||||
>>> attack = RandomLeastLikelyClassMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = RandomLeastLikelyClassMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> adv_x = attack.generate(inputs, labels) | >>> adv_x = attack.generate(inputs, labels) | ||||
""" | """ | ||||
@@ -179,9 +179,8 @@ class BasicIterativeMethod(IterativeGradientMethod): | |||||
Examples: | Examples: | ||||
>>> from mindspore.ops import operations as P | >>> from mindspore.ops import operations as P | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import BasicIterativeMethod | >>> from mindarmour.adv_robustness.attacks import BasicIterativeMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._softmax = P.Softmax() | ... self._softmax = P.Softmax() | ||||
@@ -189,7 +188,7 @@ class BasicIterativeMethod(IterativeGradientMethod): | |||||
... out = self._softmax(inputs) | ... out = self._softmax(inputs) | ||||
... return out | ... return out | ||||
>>> net = Net() | >>> net = Net() | ||||
>>> attack = BasicIterativeMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = BasicIterativeMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | >>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | ||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
@@ -284,9 +283,8 @@ class MomentumIterativeMethod(IterativeGradientMethod): | |||||
Examples: | Examples: | ||||
>>> from mindspore.ops import operations as P | >>> from mindspore.ops import operations as P | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import MomentumIterativeMethod | >>> from mindarmour.adv_robustness.attacks import MomentumIterativeMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._softmax = P.Softmax() | ... self._softmax = P.Softmax() | ||||
@@ -294,7 +292,7 @@ class MomentumIterativeMethod(IterativeGradientMethod): | |||||
... out = self._softmax(inputs) | ... out = self._softmax(inputs) | ||||
... return out | ... return out | ||||
>>> net = Net() | >>> net = Net() | ||||
>>> attack = MomentumIterativeMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = MomentumIterativeMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | >>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | ||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
@@ -428,9 +426,8 @@ class ProjectedGradientDescent(BasicIterativeMethod): | |||||
Examples: | Examples: | ||||
>>> from mindspore.ops import operations as P | >>> from mindspore.ops import operations as P | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import ProjectedGradientDescent | >>> from mindarmour.adv_robustness.attacks import ProjectedGradientDescent | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._softmax = P.Softmax() | ... self._softmax = P.Softmax() | ||||
@@ -438,7 +435,7 @@ class ProjectedGradientDescent(BasicIterativeMethod): | |||||
... out = self._softmax(inputs) | ... out = self._softmax(inputs) | ||||
... return out | ... return out | ||||
>>> net = Net() | >>> net = Net() | ||||
>>> attack = ProjectedGradientDescent(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = ProjectedGradientDescent(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | >>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | ||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
@@ -526,9 +523,8 @@ class DiverseInputIterativeMethod(BasicIterativeMethod): | |||||
Examples: | Examples: | ||||
>>> from mindspore.ops import operations as P | >>> from mindspore.ops import operations as P | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import DiverseInputIterativeMethod | >>> from mindarmour.adv_robustness.attacks import DiverseInputIterativeMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._softmax = P.Softmax() | ... self._softmax = P.Softmax() | ||||
@@ -536,7 +532,7 @@ class DiverseInputIterativeMethod(BasicIterativeMethod): | |||||
... out = self._softmax(inputs) | ... out = self._softmax(inputs) | ||||
... return out | ... return out | ||||
>>> net = Net() | >>> net = Net() | ||||
>>> attack = DiverseInputIterativeMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = DiverseInputIterativeMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | >>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | ||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
@@ -584,9 +580,8 @@ class MomentumDiverseInputIterativeMethod(MomentumIterativeMethod): | |||||
Examples: | Examples: | ||||
>>> from mindspore.ops import operations as P | >>> from mindspore.ops import operations as P | ||||
>>> from mindspore.nn import Cell, SoftmaxCrossEntropyWithLogits | |||||
>>> from mindarmour.adv_robustness.attacks import MomentumDiverseInputIterativeMethod | >>> from mindarmour.adv_robustness.attacks import MomentumDiverseInputIterativeMethod | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._softmax = P.Softmax() | ... self._softmax = P.Softmax() | ||||
@@ -594,7 +589,7 @@ class MomentumDiverseInputIterativeMethod(MomentumIterativeMethod): | |||||
... out = self._softmax(inputs) | ... out = self._softmax(inputs) | ||||
... return out | ... return out | ||||
>>> net = Net() | >>> net = Net() | ||||
>>> attack = MomentumDiverseInputIterativeMethod(net, loss_fn=SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> attack = MomentumDiverseInputIterativeMethod(net, loss_fn=nn.SoftmaxCrossEntropyWithLogits(sparse=False)) | |||||
>>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | >>> inputs = np.asarray([[0.1, 0.2, 0.7]], np.float32) | ||||
>>> labels = np.asarray([2],np.int32) | >>> labels = np.asarray([2],np.int32) | ||||
>>> labels = np.eye(3)[labels].astype(np.float32) | >>> labels = np.eye(3)[labels].astype(np.float32) | ||||
@@ -56,9 +56,8 @@ class JSMAAttack(Attack): | |||||
input labels are onehot-coded. Default: True. | input labels are onehot-coded. Default: True. | ||||
Examples: | Examples: | ||||
>>> from mindspore.nn import Cell | |||||
>>> from mindarmour.adv_robustness.attacks import JSMAAttack | >>> from mindarmour.adv_robustness.attacks import JSMAAttack | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._relu = nn.ReLU() | ... self._relu = nn.ReLU() | ||||
@@ -56,7 +56,18 @@ class LBFGS(Attack): | |||||
Examples: | Examples: | ||||
>>> from mindarmour.adv_robustness.attacks import LBFGS | >>> from mindarmour.adv_robustness.attacks import LBFGS | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> import mindspore.ops.operations as P | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._reduce = P.ReduceSum() | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._reduce(out, 2) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> net = Net() | >>> net = Net() | ||||
>>> classes = 10 | >>> classes = 10 | ||||
>>> attack = LBFGS(net, is_targeted=True) | >>> attack = LBFGS(net, is_targeted=True) | ||||
@@ -37,17 +37,28 @@ class AdversarialDefense(Defense): | |||||
Examples: | Examples: | ||||
>>> from mindspore.nn.optim.momentum import Momentum | >>> from mindspore.nn.optim.momentum import Momentum | ||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.defenses import AdversarialDefense | >>> from mindarmour.adv_robustness.defenses import AdversarialDefense | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._dense = nn.Dense(10, 10) | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._dense(out) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> net = Net() | >>> net = Net() | ||||
>>> lr = 0.001 | >>> lr = 0.001 | ||||
>>> momentum = 0.9 | >>> momentum = 0.9 | ||||
>>> batch_size = 32 | |||||
>>> batch_size = 16 | |||||
>>> num_classes = 10 | >>> num_classes = 10 | ||||
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | >>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | ||||
>>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | >>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | ||||
>>> adv_defense = AdversarialDefense(net, loss_fn, optimizer) | >>> adv_defense = AdversarialDefense(net, loss_fn, optimizer) | ||||
>>> inputs = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||||
>>> inputs = np.random.rand(batch_size, 1, 10).astype(np.float32) | |||||
>>> labels = np.random.randint(10, size=batch_size).astype(np.int32) | >>> labels = np.random.randint(10, size=batch_size).astype(np.int32) | ||||
>>> labels = np.eye(num_classes)[labels].astype(np.float32) | >>> labels = np.eye(num_classes)[labels].astype(np.float32) | ||||
>>> adv_defense.defense(inputs, labels) | >>> adv_defense.defense(inputs, labels) | ||||
@@ -106,14 +117,25 @@ class AdversarialDefenseWithAttacks(AdversarialDefense): | |||||
Examples: | Examples: | ||||
>>> from mindspore.nn.optim.momentum import Momentum | >>> from mindspore.nn.optim.momentum import Momentum | ||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.attacks import FastGradientSignMethod | >>> from mindarmour.adv_robustness.attacks import FastGradientSignMethod | ||||
>>> from mindarmour.adv_robustness.attacks import ProjectedGradientDescent | >>> from mindarmour.adv_robustness.attacks import ProjectedGradientDescent | ||||
>>> from mindarmour.adv_robustness.defenses import AdversarialDefenseWithAttacks | >>> from mindarmour.adv_robustness.defenses import AdversarialDefenseWithAttacks | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._dense = nn.Dense(10, 10) | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._dense(out) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> net = Net() | >>> net = Net() | ||||
>>> lr = 0.001 | >>> lr = 0.001 | ||||
>>> momentum = 0.9 | >>> momentum = 0.9 | ||||
>>> batch_size = 32 | |||||
>>> batch_size = 16 | |||||
>>> num_classes = 10 | >>> num_classes = 10 | ||||
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | >>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | ||||
>>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | >>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | ||||
@@ -121,8 +143,8 @@ class AdversarialDefenseWithAttacks(AdversarialDefense): | |||||
>>> pgd = ProjectedGradientDescent(net, loss_fn=loss_fn) | >>> pgd = ProjectedGradientDescent(net, loss_fn=loss_fn) | ||||
>>> ead = AdversarialDefenseWithAttacks(net, [fgsm, pgd], loss_fn=loss_fn, | >>> ead = AdversarialDefenseWithAttacks(net, [fgsm, pgd], loss_fn=loss_fn, | ||||
... optimizer=optimizer) | ... optimizer=optimizer) | ||||
>>> inputs = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||||
>>> labels = np.random.randint(num_classes, size=batch_size).astype(np.int32) | |||||
>>> inputs = np.random.rand(batch_size, 1, 10).astype(np.float32) | |||||
>>> labels = np.random.randint(10, size=batch_size).astype(np.int32) | |||||
>>> labels = np.eye(num_classes)[labels].astype(np.float32) | >>> labels = np.eye(num_classes)[labels].astype(np.float32) | ||||
>>> loss = ead.defense(inputs, labels) | >>> loss = ead.defense(inputs, labels) | ||||
""" | """ | ||||
@@ -193,14 +215,25 @@ class EnsembleAdversarialDefense(AdversarialDefenseWithAttacks): | |||||
Examples: | Examples: | ||||
>>> from mindspore.nn.optim.momentum import Momentum | >>> from mindspore.nn.optim.momentum import Momentum | ||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.attacks import FastGradientSignMethod | >>> from mindarmour.adv_robustness.attacks import FastGradientSignMethod | ||||
>>> from mindarmour.adv_robustness.attacks import ProjectedGradientDescent | >>> from mindarmour.adv_robustness.attacks import ProjectedGradientDescent | ||||
>>> from mindarmour.adv_robustness.defenses import EnsembleAdversarialDefense | >>> from mindarmour.adv_robustness.defenses import EnsembleAdversarialDefense | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._dense = nn.Dense(10, 10) | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._dense(out) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> net = Net() | >>> net = Net() | ||||
>>> lr = 0.001 | >>> lr = 0.001 | ||||
>>> momentum = 0.9 | >>> momentum = 0.9 | ||||
>>> batch_size = 32 | |||||
>>> batch_size = 16 | |||||
>>> num_classes = 10 | >>> num_classes = 10 | ||||
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | >>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | ||||
>>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | >>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | ||||
@@ -208,8 +241,8 @@ class EnsembleAdversarialDefense(AdversarialDefenseWithAttacks): | |||||
>>> pgd = ProjectedGradientDescent(net, loss_fn=loss_fn) | >>> pgd = ProjectedGradientDescent(net, loss_fn=loss_fn) | ||||
>>> ead = EnsembleAdversarialDefense(net, [fgsm, pgd], loss_fn=loss_fn, | >>> ead = EnsembleAdversarialDefense(net, [fgsm, pgd], loss_fn=loss_fn, | ||||
... optimizer=optimizer) | ... optimizer=optimizer) | ||||
>>> inputs = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||||
>>> labels = np.random.randint(num_classes, size=batch_size).astype(np.int32) | |||||
>>> inputs = np.random.rand(batch_size, 1, 10).astype(np.float32) | |||||
>>> labels = np.random.randint(10, size=batch_size).astype(np.int32) | |||||
>>> labels = np.eye(num_classes)[labels].astype(np.float32) | >>> labels = np.eye(num_classes)[labels].astype(np.float32) | ||||
>>> loss = ead.defense(inputs, labels) | >>> loss = ead.defense(inputs, labels) | ||||
""" | """ | ||||
@@ -37,18 +37,29 @@ class NaturalAdversarialDefense(AdversarialDefenseWithAttacks): | |||||
Examples: | Examples: | ||||
>>> from mindspore.nn.optim.momentum import Momentum | >>> from mindspore.nn.optim.momentum import Momentum | ||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.defenses import NaturalAdversarialDefense | >>> from mindarmour.adv_robustness.defenses import NaturalAdversarialDefense | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._dense = nn.Dense(10, 10) | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._dense(out) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> net = Net() | >>> net = Net() | ||||
>>> lr = 0.001 | >>> lr = 0.001 | ||||
>>> momentum = 0.9 | >>> momentum = 0.9 | ||||
>>> batch_size = 32 | |||||
>>> batch_size = 16 | |||||
>>> num_classes = 10 | >>> num_classes = 10 | ||||
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | >>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | ||||
>>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | >>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | ||||
>>> nad = NaturalAdversarialDefense(net, loss_fn=loss_fn, optimizer=optimizer) | >>> nad = NaturalAdversarialDefense(net, loss_fn=loss_fn, optimizer=optimizer) | ||||
>>> inputs = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||||
>>> labels = np.random.randint(num_classes, size=batch_size).astype(np.int32) | |||||
>>> inputs = np.random.rand(batch_size, 1, 10).astype(np.float32) | |||||
>>> labels = np.random.randint(10, size=batch_size).astype(np.int32) | |||||
>>> labels = np.eye(num_classes)[labels].astype(np.float32) | >>> labels = np.eye(num_classes)[labels].astype(np.float32) | ||||
>>> loss = nad.defense(inputs, labels) | >>> loss = nad.defense(inputs, labels) | ||||
""" | """ | ||||
@@ -43,18 +43,29 @@ class ProjectedAdversarialDefense(AdversarialDefenseWithAttacks): | |||||
Examples: | Examples: | ||||
>>> from mindspore.nn.optim.momentum import Momentum | >>> from mindspore.nn.optim.momentum import Momentum | ||||
>>> import mindspore.ops.operations as P | |||||
>>> from mindarmour.adv_robustness.defenses import ProjectedAdversarialDefense | >>> from mindarmour.adv_robustness.defenses import ProjectedAdversarialDefense | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._softmax = P.Softmax() | |||||
... self._dense = nn.Dense(10, 10) | |||||
... self._squeeze = P.Squeeze(1) | |||||
... def construct(self, inputs): | |||||
... out = self._softmax(inputs) | |||||
... out = self._dense(out) | |||||
... out = self._squeeze(out) | |||||
... return out | |||||
>>> net = Net() | >>> net = Net() | ||||
>>> lr = 0.001 | >>> lr = 0.001 | ||||
>>> momentum = 0.9 | >>> momentum = 0.9 | ||||
>>> batch_size = 32 | |||||
>>> batch_size = 16 | |||||
>>> num_classes = 10 | >>> num_classes = 10 | ||||
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | >>> loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=False) | ||||
>>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | >>> optimizer = Momentum(net.trainable_params(), learning_rate=lr, momentum=momentum) | ||||
>>> pad = ProjectedAdversarialDefense(net, loss_fn=loss_fn, optimizer=optimizer) | >>> pad = ProjectedAdversarialDefense(net, loss_fn=loss_fn, optimizer=optimizer) | ||||
>>> inputs = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||||
>>> labels = np.random.randint(num_classes, size=batch_size).astype(np.int32) | |||||
>>> inputs = np.random.rand(batch_size, 1, 10).astype(np.float32) | |||||
>>> labels = np.random.randint(10, size=batch_size).astype(np.int32) | |||||
>>> labels = np.eye(num_classes)[labels].astype(np.float32) | >>> labels = np.eye(num_classes)[labels].astype(np.float32) | ||||
>>> loss = pad.defense(inputs, labels) | >>> loss = pad.defense(inputs, labels) | ||||
""" | """ | ||||
@@ -36,12 +36,11 @@ class EnsembleDetector(Detector): | |||||
Default: 'vote' | Default: 'vote' | ||||
Examples: | Examples: | ||||
>>> from mindspore.ops.operations import Add | >>> from mindspore.ops.operations import Add | ||||
>>> from mindspore.nn import Cell | |||||
>>> from mindspore import Model | >>> from mindspore import Model | ||||
>>> from mindarmour.adv_robustness.detectors import ErrorBasedDetector | >>> from mindarmour.adv_robustness.detectors import ErrorBasedDetector | ||||
>>> from mindarmour.adv_robustness.detectors import RegionBasedDetector | >>> from mindarmour.adv_robustness.detectors import RegionBasedDetector | ||||
>>> from mindarmour.adv_robustness.detectors import EnsembleDetector | >>> from mindarmour.adv_robustness.detectors import EnsembleDetector | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self.add = Add() | ... self.add = Add() | ||||
@@ -49,10 +49,9 @@ class ErrorBasedDetector(Detector): | |||||
Examples: | Examples: | ||||
>>> from mindspore.ops.operations import Add | >>> from mindspore.ops.operations import Add | ||||
>>> from mindspore.nn import Cell | |||||
>>> from mindspore import Model | >>> from mindspore import Model | ||||
>>> from mindarmour.adv_robustness.detectors import ErrorBasedDetector | >>> from mindarmour.adv_robustness.detectors import ErrorBasedDetector | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self.add = Add() | ... self.add = Add() | ||||
@@ -55,10 +55,9 @@ class RegionBasedDetector(Detector): | |||||
Examples: | Examples: | ||||
>>> from mindspore.ops.operations import Add | >>> from mindspore.ops.operations import Add | ||||
>>> from mindspore.nn import Cell | |||||
>>> from mindspore import Model | >>> from mindspore import Model | ||||
>>> from mindarmour.adv_robustness.detectors import RegionBasedDetector | >>> from mindarmour.adv_robustness.detectors import RegionBasedDetector | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self.add = Add() | ... self.add = Add() | ||||
@@ -54,10 +54,9 @@ class SpatialSmoothing(Detector): | |||||
Examples: | Examples: | ||||
>>> import mindspore.ops.operations as P | >>> import mindspore.ops.operations as P | ||||
>>> from mindspore.nn import Cell | |||||
>>> from mindspore import Model | >>> from mindspore import Model | ||||
>>> from mindarmour.adv_robustness.detectors import SpatialSmoothing | >>> from mindarmour.adv_robustness.detectors import SpatialSmoothing | ||||
>>> class Net(Cell): | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | ... def __init__(self): | ||||
... super(Net, self).__init__() | ... super(Net, self).__init__() | ||||
... self._softmax = P.Softmax() | ... self._softmax = P.Softmax() | ||||
@@ -63,7 +63,13 @@ class DPOptimizerClassFactory: | |||||
Examples: | Examples: | ||||
>>> from mindarmour.privacy.diff_privacy import DPOptimizerClassFactory | >>> from mindarmour.privacy.diff_privacy import DPOptimizerClassFactory | ||||
>>> from tests.ut.python.utils.mock_net import Net | |||||
>>> class Net(nn.Cell): | |||||
... def __init__(self): | |||||
... super(Net, self).__init__() | |||||
... self._relu = nn.ReLU() | |||||
... def construct(self, inputs): | |||||
... out = self._relu(inputs) | |||||
... return out | |||||
>>> network = Net() | >>> network = Net() | ||||
>>> GaussianSGD = DPOptimizerClassFactory(micro_batches=2) | >>> GaussianSGD = DPOptimizerClassFactory(micro_batches=2) | ||||
>>> GaussianSGD.set_mechanisms('Gaussian', norm_bound=1.0, initial_noise_multiplier=1.5) | >>> GaussianSGD.set_mechanisms('Gaussian', norm_bound=1.0, initial_noise_multiplier=1.5) | ||||
@@ -79,9 +85,8 @@ class DPOptimizerClassFactory: | |||||
def set_mechanisms(self, policy, *args, **kwargs): | def set_mechanisms(self, policy, *args, **kwargs): | ||||
""" | """ | ||||
Get noise mechanism object. Policies can be 'sgd', 'momentum' | |||||
or 'adam'. Candidate args and kwargs can be seen in class | |||||
NoiseMechanismsFactory of mechanisms.py. | |||||
Get noise mechanism object. Policies can be 'Gaussian' or 'AdaGaussian'. | |||||
Candidate args and kwargs can be seen in class NoiseMechanismsFactory of mechanisms.py. | |||||
Args: | Args: | ||||
policy (str): Choose mechanism type. | policy (str): Choose mechanism type. | ||||
@@ -70,7 +70,8 @@ class DPModel(Model): | |||||
DPModel is used for constructing a model for differential privacy training. | DPModel is used for constructing a model for differential privacy training. | ||||
This class is overload mindspore.train.model.Model. | This class is overload mindspore.train.model.Model. | ||||
For details, please check `Tutorial <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_. | |||||
For details, please check `Protecting User Privacy with Differential Privacy Mechanism | |||||
<https://mindspore.cn/mindarmour/docs/en/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_. | |||||
Args: | Args: | ||||
micro_batches (int): The number of small batches split from an original | micro_batches (int): The number of small batches split from an original | ||||
@@ -98,7 +98,8 @@ class MembershipInference: | |||||
for inferring user's privacy data. It requires loss or logits results of the training samples. | for inferring user's privacy data. It requires loss or logits results of the training samples. | ||||
(Privacy refers to some sensitive attributes of a single user). | (Privacy refers to some sensitive attributes of a single user). | ||||
For details, please refer to the `Tutorial <https://mindspore.cn/mindarmour/docs/en/master/test_model_security_membership_inference.html>`_. | |||||
For details, please refer to the `Using Membership Inference to Test Model Security | |||||
<https://mindspore.cn/mindarmour/docs/en/master/test_model_security_membership_inference.html>`_. | |||||
References: `Reza Shokri, Marco Stronati, Congzheng Song, Vitaly Shmatikov. | References: `Reza Shokri, Marco Stronati, Congzheng Song, Vitaly Shmatikov. | ||||
Membership Inference Attacks against Machine Learning Models. 2017. | Membership Inference Attacks against Machine Learning Models. 2017. | ||||
@@ -27,7 +27,8 @@ TAG = 'suppress masker' | |||||
class SuppressMasker(Callback): | class SuppressMasker(Callback): | ||||
""" | """ | ||||
Periodicity check suppress privacy function status and toggle suppress operation. | Periodicity check suppress privacy function status and toggle suppress operation. | ||||
For details, please check `Tutorial <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_. | |||||
For details, please check `Protecting User Privacy with Suppression Privacy | |||||
<https://mindspore.cn/mindarmour/docs/en/master/protect_user_privacy_with_suppress_privacy.html>`_. | |||||
Args: | Args: | ||||
model (SuppressModel): SuppressModel instance. | model (SuppressModel): SuppressModel instance. | ||||
@@ -35,7 +35,8 @@ class SuppressPrivacyFactory: | |||||
""" | """ | ||||
Factory class of SuppressCtrl mechanisms. | Factory class of SuppressCtrl mechanisms. | ||||
For details, please check `Tutorial <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_. | |||||
For details, please check `Protecting User Privacy with Suppress Privacy | |||||
<https://mindspore.cn/mindarmour/docs/en/master/protect_user_privacy_with_suppress_privacy.html>`_. | |||||
""" | """ | ||||
def __init__(self): | def __init__(self): | ||||
@@ -118,7 +119,8 @@ class SuppressCtrl(Cell): | |||||
finding the parameters that should be suppressed, and suppress these | finding the parameters that should be suppressed, and suppress these | ||||
parameters permanently. | parameters permanently. | ||||
For details, please check `Tutorial <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_. | |||||
For details, please check `Protecting User Privacy with Suppress Privacy | |||||
<https://mindspore.cn/mindarmour/docs/en/master/protect_user_privacy_with_suppress_privacy.html>`_. | |||||
Args: | Args: | ||||
networks (Cell): The training network. | networks (Cell): The training network. | ||||
@@ -59,7 +59,8 @@ class SuppressModel(Model): | |||||
Complete model train function. The suppress privacy function is embedded into the overload | Complete model train function. The suppress privacy function is embedded into the overload | ||||
mindspore.train.model.Model. | mindspore.train.model.Model. | ||||
For details, please check `Tutorial <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html>`_. | |||||
For details, please check `Protecting User Privacy with Suppress Privacy | |||||
<https://mindspore.cn/mindarmour/docs/en/master/protect_user_privacy_with_suppress_privacy.html>`_. | |||||
Args: | Args: | ||||
network (Cell): The training network. | network (Cell): The training network. | ||||
@@ -89,7 +89,8 @@ class OodDetectorFeatureCluster(OodDetector): | |||||
the testing data features and the clustering centers determines whether an image is an out-of-distribution(OOD) | the testing data features and the clustering centers determines whether an image is an out-of-distribution(OOD) | ||||
image or not. | image or not. | ||||
For details, please check `Tutorial <https://mindspore.cn/mindarmour/docs/zh-CN/master/concept_drift_images.html>`_. | |||||
For details, please check `Implementing the Concept Drift Detection Application of Image Data | |||||
<https://mindspore.cn/mindarmour/docs/en/master/concept_drift_images.html>`_. | |||||
Args: | Args: | ||||
model (Model):The training model. | model (Model):The training model. | ||||
@@ -23,7 +23,8 @@ from mindarmour.utils._check_param import check_param_type, check_param_in_range | |||||
class ConceptDriftCheckTimeSeries: | class ConceptDriftCheckTimeSeries: | ||||
r""" | r""" | ||||
ConceptDriftCheckTimeSeries is used for example series distribution change detection. | ConceptDriftCheckTimeSeries is used for example series distribution change detection. | ||||
For details, please check `Tutorial <https://mindspore.cn/mindarmour/docs/zh-CN/master/concept_drift_time_series.html>`_. | |||||
For details, please check `Implementing the Concept Drift Detection Application of Time Series Data | |||||
<https://mindspore.cn/mindarmour/docs/en/master/concept_drift_time_series.html>`_. | |||||
Args: | Args: | ||||
window_size(int): Size of a concept window, no less than 10. If given the input data, | window_size(int): Size of a concept window, no less than 10. If given the input data, | ||||
@@ -31,7 +31,8 @@ class FaultInjector: | |||||
Fault injection module simulates various fault scenarios for deep neural networks and evaluates | Fault injection module simulates various fault scenarios for deep neural networks and evaluates | ||||
performance and reliability of the model. | performance and reliability of the model. | ||||
For details, please check `Tutorial <https://mindspore.cn/mindarmour/docs/zh-CN/master/fault_injection.html>`_. | |||||
For details, please check `Implementing the Model Fault Injection and Evaluation | |||||
<https://mindspore.cn/mindarmour/docs/en/master/fault_injection.html>`_. | |||||
Args: | Args: | ||||
model (Model): The model need to be evaluated. | model (Model): The model need to be evaluated. | ||||