CS231n笔记-Assignment2

Convolutional Neural Networks for Visual Recognition

Posted by Pekary on September 18, 2017 , views

1.环境安装遇到的问题

  • 用pip安装gnureadline报错

    原因:缺少libncurses包

    1
    
    sudo apt install libncurses5-dev
    
  • 运行jupyter notebook,总是遇到The kernel has died, and the automatic restart has failed

    解决办法:

    1
    
    pip3 install --upgrade ipykernel
    
  • 升级xserver-xorg-input-all后重启电脑键盘鼠标失灵

    解决办法:

    1
    
    sudo apt install --reinstall xserver-xorg-input-all
    

2.程序问题

  • 复杂求导(反向传播)如果不想出错,一定要用计算图!!计算图的模块尽量细分,比如$1/x, x^2$等等,但计算效率可能会低一点。

  • ​Batch Normalization 求导:

    bn

​ ​ pbn

​ 最开始没有看懂$x_i$的求导,同时采用计算图或者一元函数链式法则给把自己弄糊涂了,尽管能求,但是略复杂。实际上把loss看成$x_i, \mu_B, \sigma_B^2$的函数,再利用多元函数链式法则即可。

多元函数链式法则

​ 令$z=f(x, y)$, 其中$x=g(t), y=h(t)$,$g(t)$和$h(t)$是可微函数,则:

​ 这样看,$\frac{\partial l}{\partial x_i}$就很好理解了。

  • x为一矩阵,mask为一个同型布尔值矩阵,x[mask]返回的是一个向量,但是x[mask] = 0这一操作是将x中mask对应为True的位置的值赋为0。

  • 利用np.pad给第2维和第3维填充0:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    >>> npad = ((0, 0), (1, 1), (1, 1))
    >>> np.pad(x, pad_width=npad, mode='constant')
    array([[[ 0.,  0.,  0.,  0.,  0.],
            [ 0.,  1.,  1.,  1.,  0.],
            [ 0.,  1.,  1.,  1.,  0.],
            [ 0.,  1.,  1.,  1.,  0.],
            [ 0.,  0.,  0.,  0.,  0.]],
    
           [[ 0.,  0.,  0.,  0.,  0.],
            [ 0.,  1.,  1.,  1.,  0.],
            [ 0.,  1.,  1.,  1.,  0.],
            [ 0.,  1.,  1.,  1.,  0.],
            [ 0.,  0.,  0.,  0.,  0.]]])
    >>> x.shape
    (2, 3, 3)
    >>> np.pad(x, pad_width=npad, mode='constant').shape
    (2, 5, 5)
    
  • 多通道卷积操作:将每个通道的filter与图片对应通道的对应区域点乘然后求和后再加b(bias).