You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Numpy生成满足约束的MNIST图像对抗噪声

用Numpy实现带L∞+αL2混合约束的MNIST图像噪声添加

我们需要生成满足约束 ||δ||_∞ + α·||δ||_2 ≤ ε 的噪声δ,其中α和ε是可自定义的参数,下面是纯Numpy的实现版本,对应你给出的PyTorch逻辑,替换了所有PyTorch专属操作:

import numpy as np

def generate_weight_linf_l2_perturbations(alpha, epsilon, image):
    # 假设输入image是Numpy数组,形状为(28,28)(MNIST单通道图像)
    delta_norm = epsilon + 1  # 初始值设为超过epsilon,触发循环
    while delta_norm > epsilon:
        # 生成范围在[-epsilon, epsilon]的随机噪声(若要保持原代码非负逻辑,可改为(0, epsilon))
        delta = np.random.uniform(-epsilon, epsilon, image.shape)
        # 计算L2范数
        l2_norm = np.linalg.norm(delta)
        # 计算L∞范数
        linf_norm = np.linalg.norm(delta, ord=np.inf)
        # 计算混合范数
        delta_norm = linf_norm + alpha * l2_norm
        # 可选:打印调试信息
        # print(f"L2: {l2_norm:.4f}, L∞: {linf_norm:.4f}, 混合范数: {delta_norm:.4f}, ε: {epsilon}")
    
    # 添加噪声并截断到[0,1]范围
    image_pert = image + delta
    return np.clip(image_pert, 0, 1)

关键说明:

  • 噪声生成:原代码生成非负噪声,这里改成对称的[-epsilon,epsilon]更符合常见噪声场景,若需保持原逻辑,修改np.random.uniform的参数即可。
  • 范数计算:Numpy通过np.linalg.norm完成范数计算,ord=np.inf对应L∞范数(取数组中绝对值最大的元素)。
  • 像素截断:用np.clip替代PyTorch的torch.clamp,确保添加噪声后的图像像素值保持在MNIST的合法范围[0,1]内。

你可以自行完成PyTorch Tensor与Numpy数组之间的转换(比如用tensor.numpy()或torch.from_numpy())。

内容的提问来源于stack exchange,提问作者leech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:30:52