對抗樣本學習筆記(一)

iriszhan發表於2019-04-21

前言

今天開始看了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]:返回最大值所在索引。

相關文章