网上帖子都是给一个2D的卷积图,其实并没什么用。
由于任务需要,我自己写一套反向传播,发现各种坑的地方,
这次介绍一下反卷积的实现。
我开始以为反卷积这样就可以permute(para_conv, [2 1 4 3]);
但直接这样是不对的。
实际需要,在4D卷积核最后两个channel维度(3 和 4)互换后,一定要把前面两维也做变换。
具体变换就是上下、左右各翻转一次。
可以用fliplr和flipud实现。
反向传播如果没有自动求导的代码,手写这部分东西繁琐的地方很多,毫无意义,根据欧拉-拉格朗日方程,这种方法本身就是不精确的,所以求出精确的导数函数解也没有意义,能梯度下降好,收敛就可以了。
如果以后算力高,不知道会不会把数值分析里面的高级求值方法引入,比如著名的四阶龙哥库塔法这些。