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 求导:
最开始没有看懂$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).
-
‘Feedforward in CNN is identical with convolution operation’, ‘Backpropagation also results with convolution’
-
矩阵求导维数相容原则:
如果$x \in R^{m\times n},f(x) \in R,$ 那么$\frac{\partial f(x)}{\partial x} \in R^{m\times n}$;
如果$x \in R^{m \times 1}, f(x) \in R^n$,那么$\frac{\partial f(x)}{\partial x} \in R^{n\times m}$