python 切片的一些混淆点(备忘)

1.经常混淆的py切片细节

image-20200716200313100

python 中的 [:-1] 和 [::-1]

  • https://www.runoob.com/note/51257

  • a='python'
    b=a[::-1]
    print(b) #nohtyp
    c=a[::-2]
    print(c) #nhy
    #从后往前数的话,最后一个位置为-1
    d=a[:-1]  #从位置0到位置-1之前的数
    print(d)  #pytho
    e=a[:-2]  #从位置0到位置-2之前的数
    print(e)  #pyth
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    * ```python
    b = a[i:j] # 表示复制a[i]到a[j-1],以生成新的list对象

    a = [0,1,2,3,4,5,6,7,8,9]
    b = a[1:3] # [1,2]

    # 当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
    # 当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10]
    # 当i,j都缺省时,a[:]就相当于完整复制一份a

    b = a[i:j:s] # 表示:i,j与上面的一样,但s表示步进,缺省为1.
    # 所以a[i:j:1]相当于a[i:j]

    # 当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
    # 所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍,即倒序。

2.关于 torch 的pad:full模式(相对于tf中的same模式)

$$
H_{out} = \left\lfloor\frac{H_{in} + 2 \times \text{padding}[0] - \text{dilation}[0]
\times (\text{kernel_size}[0] - 1) - 1}{\text{stride}[0]} + 1\right\rfloor

W_{out} = \left\lfloor\frac{W_{in}  + 2 \times \text{padding}[1] - \text{dilation}[1]
          \times (\text{kernel_size}[1] - 1) - 1}{\text{stride}[1]} + 1\right\rfloor

$$

image-20200801174738560

相比tensorflow,PyTorch需要用户清楚的知道的自己的卷积核选取对结果的影响。

  • 简单一点:先只看 t = kernel【0】// 2;
  • Kernel【0】为奇数,那么padding就等于 t;
  • 否则,kernel【0】为偶数,那么padding就等于 【t - 1】

3.反卷积

image-20200801184748828

https://blog.csdn.net/g11d111/article/details/82665265

  • 反卷积这部分用的少,公式其实就是正卷积中,in 和 out 对调;
  • 只不过 反卷积没有了 正卷积 中 的 向下取整 的操作
  • 所以在反卷积中, 需要按规矩公式,简单计算一下padding 尺寸参数;
  • 最简单就是用局部代码输出看一下结果,看是否符合输入输出尺寸要求

image-20200801193706275

https://blog.csdn.net/m0_37586991/article/details/87855342

image-20200801194739307