9.1.1 l0范数
    l0范数是指向量中非0的元素的个数,因此扰动的l0范数指的是扰动的非0的元素的个数。以图像数据为例,针对图像数据的扰动的l0范数指的就是修改的像素数据个数。
    假设img和img_adv分别代表归一化后的原始图像和对抗样本,图像的像素数据个数为:
    #(1*224*224*3)
    size=(img.shape[0])*(img.shape[1])*(img.shape[2])*(img.shape[3])
    print('image size {} shape {}'.format(size,img.shape) )
    一个典型的图像数据的像素数据个数为:
    image size 150528 shape (1, 224, 224, 3)
    扰动量可以表示为:
    #计算该变量
    deta=img[0] - img_adv[0]
    扰动的l0范数大小为:
    #计算绝对量
    _l0 = len(np.where(np.abs(deta)>0.0)[0])
    这里需要特别介绍一下np.where函数的特性,假设向量a定义如下:
    a = np.arange(27).reshape(3,3,3)
    a=np.expand_dims(a,axis=0)
    a的实际数据如图9-1所示,打印其中非零的元素,输出如图9-2所示,np.where返回的结果分为4个向量,每个向量分别表示了非零元素在a中某个维度的坐标,a一共有4个维度,因此返回4个向量,每个向量的大小都为26,即非零的元素的个数。
    print(np.where(np.abs(a)>0))
    图9-1 np.where示例(一)
    图9-2 np.where示例(二)
    因此a中非零元素的个数可以表示为:
    len(np.where(np.abs(a)>0)[0])

章节目录

智能系统与技术丛书·AI安全之对抗样本入门所有内容均来自互联网,一曲书屋只为原作者兜哥的小说进行宣传。欢迎各位书友支持兜哥并收藏智能系统与技术丛书·AI安全之对抗样本入门最新章节