You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mindarmour.reliability.rst 6.5 kB

3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. mindarmour.reliability
  2. ======================
  3. MindArmour的可靠性方法。
  4. .. py:class:: mindarmour.reliability.FaultInjector(model, fi_type=None, fi_mode=None, fi_size=None)
  5. 故障注入模块模拟深度神经网络的各种故障场景,并评估模型的性能和可靠性。
  6. 详情请查看 `实现模型故障注入评估模型容错性 <https://mindspore.cn/mindarmour/docs/zh-CN/r1.9/fault_injection.html>`_。
  7. 参数:
  8. - **model** (Model) - 需要评估模型。
  9. - **fi_type** (list) - 故障注入的类型,包括'bitflips_random'(随机翻转)、'bitflips_designated'(翻转关键位)、'random'、'zeros'、'nan'、'inf'、'anti_activation'、'precision_loss'等。
  10. - **fi_mode** (list) - 故障注入的模式。可选值:'single_layer','all_layer'。
  11. - **fi_size** (list) - 故障注入的次数,表示需要注入多少值。
  12. .. py:method:: kick_off(ds_data, ds_label, iter_times=100)
  13. 启动故障注入并返回最终结果。
  14. 参数:
  15. - **ds_data** (np.ndarray) - 输入测试数据。评估基于这些数据。
  16. - **ds_label** (np.ndarray) - 数据的标签,对应于数据。
  17. - **iter_times** (int) - 评估数,这将决定批处理大小。
  18. 返回:
  19. - **list** - 故障注入的结果。
  20. .. py:method:: metrics()
  21. 最终结果的指标。
  22. 返回:
  23. - **list** - 结果总结。
  24. .. py:class:: mindarmour.reliability.ConceptDriftCheckTimeSeries(window_size=100, rolling_window=10, step=10, threshold_index=1.5, need_label=False)
  25. 概念漂移检查时间序列(ConceptDriftCheckTimeSeries)用于样本序列分布变化检测。
  26. 有关详细信息,请查看 `实现时序数据概念漂移检测应用
  27. <https://mindspore.cn/mindarmour/docs/zh-CN/r1.9/concept_drift_time_series.html>`_。
  28. 参数:
  29. - **window_size** (int) - 概念窗口的大小,不小于10。如果给定输入数据, `window_size` 在[10, 1/3*len( `data` )]中。
  30. 如果数据是周期性的,通常 `window_size` 等于2-5个周期。例如,对于月/周数据,30/7天的数据量是一个周期。默认值:100。
  31. - **rolling_window** (int) - 平滑窗口大小,在[1, `window_size` ]中。默认值:10。
  32. - **step** (int) - 滑动窗口的跳跃长度,在[1, `window_size` ]中。默认值:10。
  33. - **threshold_index** (float) - 阈值索引,:math:`(-\infty, +\infty)` 。默认值:1.5。
  34. - **need_label** (bool) - False或True。如果 `need_label` =True,则需要概念漂移标签。默认值:False。
  35. .. py:method:: concept_check(data)
  36. 在数据序列中查找概念漂移位置。
  37. 参数:
  38. - **data** (numpy.ndarray) - 输入数据。数据的shape可以是(n,1)或(n,m)。
  39. 请注意,每列(m列)是一个数据序列。
  40. 返回:
  41. - **numpy.ndarray** - 样本序列的概念漂移分数。
  42. - **float** - 判断概念漂移的阈值。
  43. - **list** - 概念漂移的位置。
  44. .. py:class:: mindarmour.reliability.OodDetector(model, ds_train)
  45. 分布外检测器的抽象类。
  46. 参数:
  47. - **model** (Model) - 训练模型。
  48. - **ds_train** (numpy.ndarray) - 训练数据集。
  49. .. py:method:: get_optimal_threshold(label, ds_eval)
  50. 获取最佳阈值。尝试找到一个最佳阈值来检测OOD样本。最佳阈值由标记的数据集 `ds_eval` 计算。
  51. 参数:
  52. - **label** (numpy.ndarray) - 区分图像是否为分布内或分布外的标签。
  53. - **ds_eval** (numpy.ndarray) - 帮助查找阈值的测试数据集。
  54. 返回:
  55. - **float** - 最佳阈值。
  56. .. py:method:: ood_predict(threshold, ds_test)
  57. 分布外(out-of-distribution,OOD)检测。此函数的目的是检测被视为 `ds_test` 的图像是否为OOD样本。如果一张图像的预测分数大于 `threshold` ,则该图像为分布外。
  58. 参数:
  59. - **threshold** (float) - 判断ood数据的阈值。可以根据经验设置值,也可以使用函数get_optimal_threshold。
  60. - **ds_test** (numpy.ndarray) - 测试数据集。
  61. 返回:
  62. - **numpy.ndarray** - 检测结果。0表示数据不是ood,1表示数据是ood。
  63. .. py:class:: mindarmour.reliability.OodDetectorFeatureCluster(model, ds_train, n_cluster, layer)
  64. 训练OOD检测器。提取训练数据特征,得到聚类中心。测试数据特征与聚类中心之间的距离确定图像是否为分布外(OOD)图像。
  65. 有关详细信息,请查看 `实现图像数据概念漂移检测应用 <https://mindspore.cn/mindarmour/docs/zh-CN/r1.9/concept_drift_images.html>`_。
  66. 参数:
  67. - **model** (Model) - 训练模型。
  68. - **ds_train** (numpy.ndarray) - 训练数据集。
  69. - **n_cluster** (int) - 聚类数量。取值属于[2,100]。
  70. 通常,n_cluster等于训练数据集的类号。如果OOD检测器在测试数据集中性能较差,我们可以适当增加n_cluster的值。
  71. - **layer** (str) - 特征层的名称。layer (str)由'name[:Tensor]'表示,其中'name'由用户在训练模型时给出。
  72. 请查看有关如何在'README.md'中命名模型层的更多详细信息。
  73. .. py:method:: get_optimal_threshold(label, ds_eval)
  74. 获取最佳阈值。尝试找到一个最佳阈值来检测OOD样本。最佳阈值由标记的数据集 `ds_eval` 计算。
  75. 参数:
  76. - **label** (numpy.ndarray) - 区分图像是否为分布内或分布外的标签。
  77. - **ds_eval** (numpy.ndarray) - 帮助查找阈值的测试数据集。
  78. 返回:
  79. - **float** - 最佳阈值。
  80. .. py:method:: ood_predict(threshold, ds_test)
  81. 分布外(out-of-distribution,OOD)检测。此函数的目的是检测 `ds_test` 中的图像是否为OOD样本。如果一张图像的预测分数大于 `threshold` ,则该图像为分布外。
  82. 参数:
  83. - **threshold** (float) - 判断ood数据的阈值。可以根据经验设置值,也可以使用函数get_optimal_threshold。
  84. - **ds_test** (numpy.ndarray) - 测试数据集。
  85. 返回:
  86. - **numpy.ndarray** - 检测结果。0表示数据不是ood,1表示数据是ood。

MindArmour关注AI的安全和隐私问题。致力于增强模型的安全可信、保护用户的数据隐私。主要包含3个模块:对抗样本鲁棒性模块、Fuzz Testing模块、隐私保护与评估模块。 对抗样本鲁棒性模块 对抗样本鲁棒性模块用于评估模型对于对抗样本的鲁棒性,并提供模型增强方法用于增强模型抗对抗样本攻击的能力,提升模型鲁棒性。对抗样本鲁棒性模块包含了4个子模块:对抗样本的生成、对抗样本的检测、模型防御、攻防评估。