9.1.1 l0范数
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])
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])