前言
今天开始看了advertorch包(这个包是用来生成对抗样本和防御的),记录一下。
init.py
这里面没什么意义,就是加了个可以读出版本号的函数。
utils.py
- torch_allclose:封装numpy的allclose(),判断两个torch.tensor是否逐个元素相等。
- replicate_input:从原图分离,返回一样的一个没有梯度的。
- replicate_input_withgrad():从原图中分离,返回一个有梯度的。
- calc_l2distsq:计算多个元素的l2距离,返回一个向量。
- tanh_rescale(x, x_min=-1., x_max=1.):对每个元素做tanh变换,且保证在-1~1之间。
- torch_arctanh(x, eps=1e-6)
- clamp:封装torch.clamp
- to_one_hot(y, num_classes=10):向量变矩阵每一行都是one-hot
- _batch_multiply_tensor_by_vector:里面用到了pytorch的矩阵转置。矩阵转置1:tensor名.permute(新的维序) 矩阵转置2:tensor名.transpose(两个新序号)#这个函数每次只能换两维,多次使用相当于permute 。用完permute或transpose最好.contiguous()一下。建立了一块连续内存的拷贝。使得view()后续可以用,因为.view()必须用在连续内存的基础上。
- _batch_clamp_tensor_by_vector:torch.max(向量一,向量二)#有类似于裁剪的作用
- batch_multiply:用流程控制综合了相乘是矩阵和相乘是向量的情况。
- def batch_clamp:用流程控制综合了截断是矩阵和是向量的情况。
- _get_norm_batch(x, p):计算x的每一行的p-norm
- clamp_by_pnorm(x, p, r):作用是控制每张图片的范围在相近范围内波动。
- is_float_or_torch_tensor:判断是float或torch.tensor
- normalize_by_pnorm:类似于除以方差的规范化。
- jacobian(model, x, output_class):深度学习模型如果输出多个类别的score,那么就相当于是score个函数组成,每个函数都是f(x1,x2,x3,...,xn),雅可比矩阵是由多个多元函数求一阶偏导。实现很简单,算对x求梯度即可。
- MNIST_MEAN = (0.1307,):结尾加逗号,保证是数组型,否则就是一个数了。
- mean = mean[None, :, None, None]:加维数的方法,:所在维数被忽略。None加一维,看shape能看出来。
- .max(..)[0]:返回最大的值,.max(..)[1]:返回最大值所在索引。