jsma实现程序笔记

jsma实现流程
  • 求前向导数
  • 求显著性映射
  • 更新

显著性映射找到了影响最大的两个像素点
循环中迭代次数是固定的,每次迭代,像素值增加theta

#get the saliency map and calculate the two pixels that have the greatest influence
p1, p2 = saliency_map(jacobian, var_target, increasing, search_domain, num_features)
var_sample_flatten = var_sample.view(-1, num_features)
var_sample_flatten[0, p1] += theta
var_sample_flatten[0, p2] += theta

为了找到超参数θ的含义,在查看实现代码的过程中遇到的一些troch中函数,在此记录一下。
DEEPSEC代码中注释多一点,advTorch几乎没有

torch.view()

类似于reshape 操作,操作对象可以是Tensor或者Variable。操作前提是tensor在内存中连续存放(contiguous,可用Tensor.is_contiguous()判断)。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。
可以用tensor.max( tensor.view ( -1,size * size ) ) 求最大的值和idx
详细解释见 PyTorch中的contiguous

torch.stack()

dim=0时,则就是讲[]中的n个矩阵变成n维,按照顺序,第i维是第i个矩阵,size=(i,x,y)
dim=1是,将列表[]中的每个矩阵的第一行组成第一维矩阵,依次下去,每个数组第n行组成第n维数组。size=(n,i,y)
dim=2是,讲列表[]中的

  • 每个矩阵的第一行的第一个值,组成第一维的第一行,每一个矩阵的第一行第二个值组成第一维的第二行,以此类推,,每一个矩阵的第一行第n个值,组成第一维的第n行。

  • 每个矩阵的第二行的第一个值,组成第二维的第一行,每一个矩阵的第二行第二个值组成第二维的第二行,以此类推,每一个矩阵的,第二行第n个值,组成第二维的第n行。

  • 以此类推
    每个矩阵的第n行的第一个值,组成第n维的第一行,每一个矩阵的第n行第二个值组成第n维的第二行,以此类推,每一个矩阵的,第n行第n个值,组成第n维的第n行。size=(n,y,i)

torch.remainder(input, divisor, out=None)

说明: 返回一个新张量,包含输入input张量每个元素的除法余数。除数与被除数可能同时包含整数或浮点数,余数与除数有相同的符号

参数:
input(Tensor) – 被除数
divisor(Tensor or float) – 除数,一个数或者与除数相同大小的张量
out(Tensor,可选) – 输出张量

dim() → int

返回tensor的维数

torch.eq(input, other, out=None) → Tensor

说明: 比较元素相等性。第二个参数可为一个数或与第一个参数同类型形状的张量。
参数:

  • input (Tensor) – 待比较张量
  • other (Tensor or float) – 比较张量或数
  • out (Tensor,optional) – 输出张量,须为 ByteTensor类型 or 与input同类型
torch.gt(input, other, out=None) → Tensor

说明: 逐元素比较input和other , 即是否input[i] > other[i] 如果两个张量有相同的形状和元素值,则返回True ,否则 False。 第二个参数可以为一个数或与第一个参数相同形状和类型的张量

  • input (Tensor) – 要对比的张量
  • other (Tensor or float) – 要对比的张量或float值
  • out (Tensor, optional) – 输出张量。必须为ByteTensor或者与第一个参数tensor相同类型。
torch.lt(input, other, out=None) → Tensor

说明: 逐元素比较input和other , 即是否 input < other,其他同上

numpy.prod(a, axis=None, dtype=None, out=None,)

Return the product of array elements over a given axis.元素相乘结果,可指定axis

any(),long()

python 内置函数 any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。
元素除了是 0、空、FALSE 外都算 TRUE。
python 内置函数 long() 函数将数字或字符串转换为一个长整型,类似于float()

你可能感兴趣的:(对抗样本,对抗样本)