@@ -79,9 +79,6 @@ class AdversarialDefense(Defense): | |||
Returns: | |||
numpy.ndarray, loss of defense operation. | |||
Examples: | |||
>>> adv_defense.defense(inputs, labels) | |||
""" | |||
inputs, labels = check_pair_numpy_param('inputs', inputs, 'labels', | |||
labels) | |||
@@ -98,6 +98,9 @@ class SimilarityDetector(Detector): | |||
>>> detector.set_threshold(num_nearest_neighbors[-1], thresholds[-1]) | |||
>>> detector.detect(benign_queries) | |||
>>> detections = detector.get_detection_interval() | |||
>>> detector.detect_diff() | |||
>>> detected_queries = detector.get_detected_queries() | |||
>>> detector.transform(x_train) | |||
""" | |||
def __init__(self, trans_model, max_k_neighbor=1000, chunk_size=1000, | |||
@@ -137,13 +140,6 @@ class SimilarityDetector(Detector): | |||
Raises: | |||
ValueError: The number of training data is less than | |||
max_k_neighbor! | |||
Examples: | |||
>>> x_train = np.random.rand(10, 32, 32, 3).astype(np.float32) | |||
>>> perm = np.random.permutation(x_train.shape[0]) | |||
>>> benign_queries = x_train[perm[:10], :, :, :] | |||
>>> num_nearest_neighbors, thresholds = detector.fit(inputs=x_train) | |||
>>> detector.set_threshold(num_nearest_neighbors[-1], thresholds[-1]) | |||
""" | |||
data = check_numpy_param('inputs', inputs) | |||
data_len = data.shape[0] | |||
@@ -192,14 +188,6 @@ class SimilarityDetector(Detector): | |||
Raises: | |||
ValueError: The parameters of threshold or num_of_neighbors is | |||
not available. | |||
Examples: | |||
>>> x_train = np.random.rand(10, 32, 32, 3).astype(np.float32) | |||
>>> perm = np.random.permutation(x_train.shape[0]) | |||
>>> benign_queries = x_train[perm[:10], :, :, :] | |||
>>> num_nearest_neighbors, thresholds = detector.fit(inputs=x_train) | |||
>>> detector.set_threshold(num_nearest_neighbors[-1], thresholds[-1]) | |||
>>> detector.detect(benign_queries) | |||
""" | |||
if self._threshold is None or self._num_of_neighbors is None: | |||
msg = 'Explicit detection threshold and number of nearest ' \ | |||
@@ -247,9 +235,6 @@ class SimilarityDetector(Detector): | |||
def clear_buffer(self): | |||
""" | |||
Clear the buffer memory. | |||
Examples: | |||
>>> detector.detect(benign_queries) | |||
""" | |||
while self._buffer: | |||
self._buffer.pop() | |||
@@ -261,10 +246,6 @@ class SimilarityDetector(Detector): | |||
Args: | |||
num_of_neighbors (int): Number of the nearest neighbors. | |||
threshold (float): Detection threshold. | |||
Examples: | |||
>>> num_nearest_neighbors, thresholds = detector.fit(inputs=x_train) | |||
>>> detector.set_threshold(num_nearest_neighbors[-1], thresholds[-1]) | |||
""" | |||
self._num_of_neighbors = check_int_positive('num_of_neighbors', | |||
num_of_neighbors) | |||
@@ -276,9 +257,6 @@ class SimilarityDetector(Detector): | |||
Returns: | |||
list[int], number of queries between adjacent detections. | |||
Examples: | |||
>>> detector.get_detection_interval() | |||
""" | |||
detected_queries = self._detected_queries | |||
interval = [] | |||
@@ -292,9 +270,6 @@ class SimilarityDetector(Detector): | |||
Returns: | |||
list[int], sequence number of detected malicious queries. | |||
Examples: | |||
>>> detector.get_detected_queries() | |||
""" | |||
detected_queries = self._detected_queries | |||
return detected_queries | |||
@@ -311,9 +286,6 @@ class SimilarityDetector(Detector): | |||
Raises: | |||
NotImplementedError: This function is not available | |||
in class `SimilarityDetector`. | |||
Examples: | |||
>>> detector.detect_diff() | |||
""" | |||
msg = 'The function detect_diff() is not available in the class ' \ | |||
'`SimilarityDetector`.' | |||
@@ -329,9 +301,6 @@ class SimilarityDetector(Detector): | |||
Raises: | |||
NotImplementedError: This function is not available in class `SimilarityDetector`. | |||
Examples: | |||
>>> detector.transform(x_train) | |||
""" | |||
msg = 'The function transform() is not available in the class `SimilarityDetector`.' | |||
LOGGER.error(TAG, msg) | |||
@@ -124,7 +124,7 @@ class Fuzzer: | |||
... self.reshape = P.Reshape() | |||
... self.summary = TensorSummary() | |||
... | |||
... def construct(self, x): | |||
... def construct(self, x): | |||
... x = self.conv1(x) | |||
... x = self.relu(x) | |||
... self.summary('conv1', x) | |||
@@ -172,8 +172,50 @@ class NeuronCoverage(CoverageMetrics): | |||
float, the metric of 'neuron coverage'. | |||
Examples: | |||
>>> from mindspore.common.initializer import TruncatedNormal | |||
>>> from mindspore.ops import operations as P | |||
>>> from mindspore.train import Model | |||
>>> from mindspore.ops import TensorSummary | |||
>>> from mindarmour.fuzz_testing import NeuronCoverage | |||
>>> class Net(nn.Cell): | |||
... def __init__(self): | |||
... super(Net, self).__init__() | |||
... self.conv1 = nn.Conv2d(1, 6, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.conv2 = nn.Conv2d(6, 16, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.fc1 = nn.Dense(16 * 5 * 5, 120, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc2 = nn.Dense(120, 84, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc3 = nn.Dense(84, 10, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.relu = nn.ReLU() | |||
... self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) | |||
... self.reshape = P.Reshape() | |||
... self.summary = TensorSummary() | |||
... def construct(self, x): | |||
... x = self.conv1(x) | |||
... x = self.relu(x) | |||
... self.summary('conv1', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.conv2(x) | |||
... x = self.relu(x) | |||
... self.summary('conv2', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.reshape(x, (-1, 16 * 5 * 5)) | |||
... x = self.fc1(x) | |||
... x = self.relu(x) | |||
... self.summary('fc1', x) | |||
... x = self.fc2(x) | |||
... x = self.relu(x) | |||
... self.summary('fc2', x) | |||
... x = self.fc3(x) | |||
... self.summary('fc3', x) | |||
... return x | |||
>>> net = Net() | |||
>>> model = Model(net) | |||
>>> batch_size = 8 | |||
>>> num_classe = 10 | |||
>>> train_images = np.random.rand(32, 1, 32, 32).astype(np.float32) | |||
>>> test_images = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||
>>> nc = NeuronCoverage(model, threshold=0.1) | |||
>>> nc_metrics = nc.get_metrics(test_data) | |||
>>> nc_metrics = nc.get_metrics(test_images) | |||
""" | |||
dataset = check_numpy_param('dataset', dataset) | |||
batches = math.ceil(dataset.shape[0] / self.batch_size) | |||
@@ -219,8 +261,50 @@ class TopKNeuronCoverage(CoverageMetrics): | |||
float, the metrics of 'top k neuron coverage'. | |||
Examples: | |||
>>> from mindspore.common.initializer import TruncatedNormal | |||
>>> from mindspore.ops import operations as P | |||
>>> from mindspore.train import Model | |||
>>> from mindspore.ops import TensorSummary | |||
>>> from mindarmour.fuzz_testing import TopKNeuronCoverage | |||
>>> class Net(nn.Cell): | |||
... def __init__(self): | |||
... super(Net, self).__init__() | |||
... self.conv1 = nn.Conv2d(1, 6, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.conv2 = nn.Conv2d(6, 16, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.fc1 = nn.Dense(16 * 5 * 5, 120, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc2 = nn.Dense(120, 84, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc3 = nn.Dense(84, 10, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.relu = nn.ReLU() | |||
... self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) | |||
... self.reshape = P.Reshape() | |||
... self.summary = TensorSummary() | |||
... def construct(self, x): | |||
... x = self.conv1(x) | |||
... x = self.relu(x) | |||
... self.summary('conv1', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.conv2(x) | |||
... x = self.relu(x) | |||
... self.summary('conv2', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.reshape(x, (-1, 16 * 5 * 5)) | |||
... x = self.fc1(x) | |||
... x = self.relu(x) | |||
... self.summary('fc1', x) | |||
... x = self.fc2(x) | |||
... x = self.relu(x) | |||
... self.summary('fc2', x) | |||
... x = self.fc3(x) | |||
... self.summary('fc3', x) | |||
... return x | |||
>>> net = Net() | |||
>>> model = Model(net) | |||
>>> batch_size = 8 | |||
>>> num_classe = 10 | |||
>>> train_images = np.random.rand(32, 1, 32, 32).astype(np.float32) | |||
>>> test_images = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||
>>> tknc = TopKNeuronCoverage(model, top_k=3) | |||
>>> metrics = tknc.get_metrics(test_data) | |||
>>> metrics = tknc.get_metrics(test_images) | |||
""" | |||
dataset = check_numpy_param('dataset', dataset) | |||
batches = math.ceil(dataset.shape[0] / self.batch_size) | |||
@@ -269,8 +353,50 @@ class SuperNeuronActivateCoverage(CoverageMetrics): | |||
float, the metric of 'strong neuron activation coverage'. | |||
Examples: | |||
>>> snac = SuperNeuronActivateCoverage(model, train_dataset) | |||
>>> metrics = snac.get_metrics(test_data) | |||
>>> from mindspore.common.initializer import TruncatedNormal | |||
>>> from mindspore.ops import operations as P | |||
>>> from mindspore.train import Model | |||
>>> from mindspore.ops import TensorSummary | |||
>>> from mindarmour.fuzz_testing import SuperNeuronActivateCoverage | |||
>>> class Net(nn.Cell): | |||
... def __init__(self): | |||
... super(Net, self).__init__() | |||
... self.conv1 = nn.Conv2d(1, 6, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.conv2 = nn.Conv2d(6, 16, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.fc1 = nn.Dense(16 * 5 * 5, 120, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc2 = nn.Dense(120, 84, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc3 = nn.Dense(84, 10, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.relu = nn.ReLU() | |||
... self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) | |||
... self.reshape = P.Reshape() | |||
... self.summary = TensorSummary() | |||
... def construct(self, x): | |||
... x = self.conv1(x) | |||
... x = self.relu(x) | |||
... self.summary('conv1', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.conv2(x) | |||
... x = self.relu(x) | |||
... self.summary('conv2', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.reshape(x, (-1, 16 * 5 * 5)) | |||
... x = self.fc1(x) | |||
... x = self.relu(x) | |||
... self.summary('fc1', x) | |||
... x = self.fc2(x) | |||
... x = self.relu(x) | |||
... self.summary('fc2', x) | |||
... x = self.fc3(x) | |||
... self.summary('fc3', x) | |||
... return x | |||
>>> net = Net() | |||
>>> model = Model(net) | |||
>>> batch_size = 8 | |||
>>> num_classe = 10 | |||
>>> train_images = np.random.rand(32, 1, 32, 32).astype(np.float32) | |||
>>> test_images = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||
>>> snac = SuperNeuronActivateCoverage(model, train_images) | |||
>>> metrics = snac.get_metrics(test_images) | |||
""" | |||
dataset = check_numpy_param('dataset', dataset) | |||
if not self.incremental or not self._activate_table: | |||
@@ -319,8 +445,50 @@ class NeuronBoundsCoverage(SuperNeuronActivateCoverage): | |||
float, the metric of 'neuron boundary coverage'. | |||
Examples: | |||
>>> nbc = NeuronBoundsCoverage(model, train_dataset) | |||
>>> metrics = nbc.get_metrics(test_data) | |||
>>> from mindspore.common.initializer import TruncatedNormal | |||
>>> from mindspore.ops import operations as P | |||
>>> from mindspore.train import Model | |||
>>> from mindspore.ops import TensorSummary | |||
>>> from mindarmour.fuzz_testing import NeuronBoundsCoverage | |||
>>> class Net(nn.Cell): | |||
... def __init__(self): | |||
... super(Net, self).__init__() | |||
... self.conv1 = nn.Conv2d(1, 6, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.conv2 = nn.Conv2d(6, 16, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.fc1 = nn.Dense(16 * 5 * 5, 120, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc2 = nn.Dense(120, 84, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc3 = nn.Dense(84, 10, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.relu = nn.ReLU() | |||
... self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) | |||
... self.reshape = P.Reshape() | |||
... self.summary = TensorSummary() | |||
... def construct(self, x): | |||
... x = self.conv1(x) | |||
... x = self.relu(x) | |||
... self.summary('conv1', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.conv2(x) | |||
... x = self.relu(x) | |||
... self.summary('conv2', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.reshape(x, (-1, 16 * 5 * 5)) | |||
... x = self.fc1(x) | |||
... x = self.relu(x) | |||
... self.summary('fc1', x) | |||
... x = self.fc2(x) | |||
... x = self.relu(x) | |||
... self.summary('fc2', x) | |||
... x = self.fc3(x) | |||
... self.summary('fc3', x) | |||
... return x | |||
>>> net = Net() | |||
>>> model = Model(net) | |||
>>> batch_size = 8 | |||
>>> num_classe = 10 | |||
>>> train_images = np.random.rand(32, 1, 32, 32).astype(np.float32) | |||
>>> test_images = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||
>>> nbc = NeuronBoundsCoverage(model, train_images) | |||
>>> metrics = nbc.get_metrics(test_images) | |||
""" | |||
dataset = check_numpy_param('dataset', dataset) | |||
if not self.incremental or not self._activate_table: | |||
@@ -383,8 +551,50 @@ class KMultisectionNeuronCoverage(SuperNeuronActivateCoverage): | |||
float, the metric of 'k-multisection neuron coverage'. | |||
Examples: | |||
>>> kmnc = KMultisectionNeuronCoverage(model, train_dataset, segmented_num=100) | |||
>>> metrics = kmnc.get_metrics(test_data) | |||
>>> from mindspore.common.initializer import TruncatedNormal | |||
>>> from mindspore.ops import operations as P | |||
>>> from mindspore.train import Model | |||
>>> from mindspore.ops import TensorSummary | |||
>>> from mindarmour.fuzz_testing import KMultisectionNeuronCoverage | |||
>>> class Net(nn.Cell): | |||
... def __init__(self): | |||
... super(Net, self).__init__() | |||
... self.conv1 = nn.Conv2d(1, 6, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.conv2 = nn.Conv2d(6, 16, 5, padding=0, weight_init=TruncatedNormal(0.02), pad_mode="valid") | |||
... self.fc1 = nn.Dense(16 * 5 * 5, 120, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc2 = nn.Dense(120, 84, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.fc3 = nn.Dense(84, 10, TruncatedNormal(0.02), TruncatedNormal(0.02)) | |||
... self.relu = nn.ReLU() | |||
... self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) | |||
... self.reshape = P.Reshape() | |||
... self.summary = TensorSummary() | |||
... def construct(self, x): | |||
... x = self.conv1(x) | |||
... x = self.relu(x) | |||
... self.summary('conv1', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.conv2(x) | |||
... x = self.relu(x) | |||
... self.summary('conv2', x) | |||
... x = self.max_pool2d(x) | |||
... x = self.reshape(x, (-1, 16 * 5 * 5)) | |||
... x = self.fc1(x) | |||
... x = self.relu(x) | |||
... self.summary('fc1', x) | |||
... x = self.fc2(x) | |||
... x = self.relu(x) | |||
... self.summary('fc2', x) | |||
... x = self.fc3(x) | |||
... self.summary('fc3', x) | |||
... return x | |||
>>> net = Net() | |||
>>> model = Model(net) | |||
>>> batch_size = 8 | |||
>>> num_classe = 10 | |||
>>> train_images = np.random.rand(32, 1, 32, 32).astype(np.float32) | |||
>>> test_images = np.random.rand(batch_size, 1, 32, 32).astype(np.float32) | |||
>>> kmnc = KMultisectionNeuronCoverage(model, train_images, segmented_num=100) | |||
>>> metrics = kmnc.get_metrics(test_images) | |||
""" | |||
dataset = check_numpy_param('dataset', dataset) | |||
@@ -196,10 +196,6 @@ class RDPMonitor(Callback): | |||
Returns: | |||
int, the recommended maximum training epochs. | |||
Examples: | |||
>>> rdp = PrivacyMonitorFactory.create(policy='rdp', num_samples=100, batch_size=32) | |||
>>> suggest_epoch = rdp.max_epoch_suggest() | |||
""" | |||
if self._target_delta is not None and self._max_eps is None: | |||
msg = 'max_eps should be consistent with target_delta, but got None.' | |||
@@ -450,11 +446,6 @@ class ZCDPMonitor(Callback): | |||
Returns: | |||
int, the recommended maximum training epochs. | |||
Examples: | |||
>>> zcdp = PrivacyMonitorFactory.create(policy='zcdp', | |||
>>> num_samples=60000, batch_size=32) | |||
>>> suggest_epoch = zcdp.max_epoch_suggest() | |||
""" | |||
epoch = 1 | |||
while epoch < 10000: | |||
@@ -120,7 +120,7 @@ def _attack_rf(features, labels, random_grid, n_jobs): | |||
return rf_model | |||
def get_attack_model(features, labels, config, n_jobs=-1): | |||
def _get_attack_model(features, labels, config, n_jobs=-1): | |||
""" | |||
Get trained attack model specify by config. | |||
@@ -139,10 +139,11 @@ def get_attack_model(features, labels, config, n_jobs=-1): | |||
sklearn.BaseEstimator, trained model specify by config["method"]. | |||
Examples: | |||
>>> from mindarmour.privacy.evaluation.attacker import get_attack_model | |||
>>> features = np.random.randn(10, 10) | |||
>>> labels = np.random.randint(0, 2, 10) | |||
>>> config = {"method": "knn", "params": {"n_neighbors": [3, 5, 7]}} | |||
>>> attack_model = get_attack_model(features, labels, config) | |||
>>> config = {"method": "knn", "params": {"n_neighbors": [3, 5]}} | |||
>>> attack_model = _get_attack_model(features, labels, config) | |||
""" | |||
features, labels = check_pair_numpy_param("features", features, "labels", labels) | |||
config = check_param_type("config", config, dict) | |||
@@ -135,7 +135,6 @@ class ImageInversionAttack: | |||
... loss_weights=[1, 0.2, 5]) | |||
>>> inversion_images = inversion_attack.generate(target_features, iters=10) | |||
>>> evaluate_result = inversion_attack.evaluate(original_images, inversion_images) | |||
>>> print(evaluate_result) | |||
""" | |||
def __init__(self, network, input_shape, input_bound, loss_weights=(1, 0.2, 5)): | |||
self._network = check_param_type('network', network, Cell) | |||
@@ -25,7 +25,7 @@ from mindspore import Tensor | |||
from mindarmour.utils.logger import LogUtil | |||
from mindarmour.utils._check_param import check_param_type, check_param_multi_types, \ | |||
check_model, check_numpy_param | |||
from .attacker import get_attack_model | |||
from .attacker import _get_attack_model | |||
from ._check_config import verify_config_params | |||
LOGGER = LogUtil.get_instance() | |||
@@ -123,8 +123,7 @@ class MembershipInference: | |||
... data = np.random.randn(batches * batch_size,1,10).astype(np.float32) | |||
... label = np.random.randint(0,10, batches * batch_size).astype(np.int32) | |||
... for i in range(batches): | |||
... yield data[i*batch_size:(i+1)*batch_size],\ | |||
... label[i*batch_size:(i+1)*batch_size] | |||
... yield data[i*batch_size:(i+1)*batch_size], label[i*batch_size:(i+1)*batch_size] | |||
>>> class Net(Cell): | |||
... def __init__(self): | |||
... super(Net, self).__init__() | |||
@@ -143,7 +142,7 @@ class MembershipInference: | |||
>>> config = [{ | |||
... "method": "KNN", | |||
... "params": {"n_neighbors": [3, 5, 7],} | |||
}] | |||
... }] | |||
>>> ds_train = ds.GeneratorDataset(dataset_generator, ["image", "label"]) | |||
>>> ds_test = ds.GeneratorDataset(dataset_generator, ["image", "label"]) | |||
>>> inference_model.train(ds_train, ds_test, config) | |||
@@ -195,7 +194,7 @@ class MembershipInference: | |||
features, labels = self._transform(dataset_train, dataset_test) | |||
for config in attack_config: | |||
self._attack_list.append(get_attack_model(features, labels, config, n_jobs=self._n_jobs)) | |||
self._attack_list.append(_get_attack_model(features, labels, config, n_jobs=self._n_jobs)) | |||
def eval(self, dataset_train, dataset_test, metrics): | |||
@@ -158,13 +158,6 @@ class ConceptDriftCheckTimeSeries: | |||
- numpy.ndarray, the concept drift score of the example series. | |||
- float, the threshold to judge concept drift. | |||
- list, the location of the concept drift. | |||
Examples: | |||
>>> concept = ConceptDriftCheckTimeSeries(window_size=100, rolling_window=10, | |||
... step=10, threshold_index=1.5, need_label=False) | |||
>>> data_example = 5*np.random.rand(1000) | |||
>>> data_example[200: 800] = 20*np.random.rand(600) | |||
>>> score, drift_threshold, drift_location = concept.concept_check(data_example) | |||
""" | |||
# data check | |||
data = _check_array_not_empty('data', data) | |||
@@ -59,8 +59,7 @@ class FaultInjector: | |||
... data = np.random.randn(batches * batch_size,1,10).astype(np.float32) | |||
... label = np.random.randint(0,10, batches * batch_size).astype(np.int32) | |||
... for i in range(batches): | |||
... yield data[i*batch_size:(i+1)*batch_size],\ | |||
... label[i*batch_size:(i+1)*batch_size] | |||
... yield data[i*batch_size:(i+1)*batch_size], label[i*batch_size:(i+1)*batch_size] | |||
>>> net = Net() | |||
>>> model = Model(net) | |||
>>> ds_eval = ds.GeneratorDataset(dataset_generator, ['image', 'label']) | |||
@@ -102,12 +102,24 @@ class WithLossCell(Cell): | |||
loss_fn (Function): The loss function is used for computing loss. | |||
Examples: | |||
>>> data = Tensor(np.ones([1, 1, 32, 32]).astype(np.float32)*0.01) | |||
>>> label = Tensor(np.ones([1, 10]).astype(np.float32)) | |||
>>> net = NET() | |||
>>> from mindspore import Tensor | |||
>>> from mindarmour.utils.util import WithLossCell | |||
>>> import mindspore.ops.operations as P | |||
>>> 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) | |||
... return self._squeeze(out) | |||
>>> data = Tensor(np.ones([2, 1, 10]).astype(np.float32)*0.01) | |||
>>> labels = Tensor(np.ones([2, 10]).astype(np.float32)) | |||
>>> net = Net() | |||
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits() | |||
>>> loss_net = WithLossCell(net, loss_fn) | |||
>>> loss_out = loss_net(data, label) | |||
""" | |||
def __init__(self, network, loss_fn): | |||
super(WithLossCell, self).__init__() | |||
@@ -138,9 +150,23 @@ class GradWrapWithLoss(Cell): | |||
network (Cell): The target network to wrap. | |||
Examples: | |||
>>> data = Tensor(np.ones([1, 1, 32, 32]).astype(np.float32)*0.01) | |||
>>> labels = Tensor(np.ones([1, 10]).astype(np.float32)) | |||
>>> net = NET() | |||
>>> from mindspore import Tensor | |||
>>> from mindarmour.utils import GradWrapWithLoss | |||
>>> from mindarmour.utils.util import WithLossCell | |||
>>> import mindspore.ops.operations as P | |||
>>> 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) | |||
... return self._squeeze(out) | |||
>>> data = Tensor(np.ones([2, 1, 10]).astype(np.float32)*0.01) | |||
>>> labels = Tensor(np.ones([2, 10]).astype(np.float32)) | |||
>>> net = Net() | |||
>>> loss_fn = nn.SoftmaxCrossEntropyWithLogits() | |||
>>> loss_net = WithLossCell(net, loss_fn) | |||
>>> grad_all = GradWrapWithLoss(loss_net) | |||
@@ -176,12 +202,25 @@ class GradWrap(Cell): | |||
network (Cell): The target network to wrap. | |||
Examples: | |||
>>> data = Tensor(np.ones([1, 1, 32, 32]).astype(np.float32)*0.01) | |||
>>> label = Tensor(np.ones([1, 10]).astype(np.float32)) | |||
>>> from mindspore import Tensor | |||
>>> from mindarmour.utils import GradWrap | |||
>>> from mindarmour.utils.util import WithLossCell | |||
>>> import mindspore.ops.operations as P | |||
>>> 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) | |||
... return self._squeeze(out) | |||
>>> data = Tensor(np.ones([2, 1, 10]).astype(np.float32)*0.01) | |||
>>> labels = Tensor(np.ones([2, 10]).astype(np.float32)) | |||
>>> num_classes = 10 | |||
>>> sens = np.zeros((data.shape[0], num_classes)).astype(np.float32) | |||
>>> sens[:, 1] = 1.0 | |||
>>> net = NET() | |||
>>> wrap_net = GradWrap(net) | |||
>>> wrap_net(data, Tensor(sens)) | |||
""" | |||
@@ -18,7 +18,7 @@ import pytest | |||
import numpy as np | |||
from mindarmour.privacy.evaluation.attacker import get_attack_model | |||
from mindarmour.privacy.evaluation.attacker import _get_attack_model | |||
@pytest.mark.level0 | |||
@@ -35,7 +35,7 @@ def test_get_knn_model(): | |||
"n_neighbors": [3, 5, 7], | |||
} | |||
} | |||
knn_attacker = get_attack_model(features, labels, config_knn, -1) | |||
knn_attacker = _get_attack_model(features, labels, config_knn, -1) | |||
pred = knn_attacker.predict(features) | |||
assert pred is not None | |||
@@ -54,7 +54,7 @@ def test_get_lr_model(): | |||
"C": np.logspace(-4, 2, 10), | |||
} | |||
} | |||
lr_attacker = get_attack_model(features, labels, config_lr, -1) | |||
lr_attacker = _get_attack_model(features, labels, config_lr, -1) | |||
pred = lr_attacker.predict(features) | |||
assert pred is not None | |||
@@ -75,7 +75,7 @@ def test_get_mlp_model(): | |||
"alpha": [0.0001, 0.001, 0.01], | |||
} | |||
} | |||
mlpc_attacker = get_attack_model(features, labels, config_mlpc, -1) | |||
mlpc_attacker = _get_attack_model(features, labels, config_mlpc, -1) | |||
pred = mlpc_attacker.predict(features) | |||
assert pred is not None | |||
@@ -98,6 +98,6 @@ def test_get_rf_model(): | |||
"min_samples_leaf": [1, 2, 4], | |||
} | |||
} | |||
rf_attacker = get_attack_model(features, labels, config_rf, -1) | |||
rf_attacker = _get_attack_model(features, labels, config_rf, -1) | |||
pred = rf_attacker.predict(features) | |||
assert pred is not None |