Minist网络一共用到了12个算子,我们先从简单的开始,逐个分析:
Relu算子:
神经网络中使用激活函数来加入非线性因素,提高模型的表达能力。ReLU是(Rectified Linear Unit,修正线性单元) 的缩写,它的表达式如下:


libonnx中的实现方式,可以看出完全符合上述逻辑:

Reshape算子:


2.偏置加权节点

按照网络偏置的计算方法,输入图像的维数应该和偏置的维数一样的,但是明显 1*8*28*28 = 6272!=8*1*1,这是为什么呢?加入调试打印,当pb发生切换时我们打印一次:

调试发现,节点层的维数信息确实和我们上面计算的是相同的,所以说明我们调试的网络层是对的。
GDB输入finish到程序的末尾:

我们找到了规律,在如下的位置处,PB发生了变化。
i = 0, pb = 0x5555558dc950 , *pb = -0.161540.
i = 784, pb = 0x5555558dc954 , *pb = -0.433836.
i = 1568, pb = 0x5555558dc958 , *pb = 0.091641.
i = 2352, pb = 0x5555558dc95c , *pb = -0.016852.
i = 3136, pb = 0x5555558dc960 , *pb = -0.065026.
i = 3920, pb = 0x5555558dc964 , *pb = -0.131738.
i = 4704, pb = 0x5555558dc968 , *pb = 0.020418.
i = 5488, pb = 0x5555558dc96c , *pb = -0.121110.
恰好 :
也就是说每个28*28的矩阵,共用同一个偏置b,这就对的上了。因为如果28*28共用一个的化,共需要
个偏置.
现在解释另一个数据, strides表示从每个维度来看,这个维度的数据长度。以array[1][8][28][28].为例,分别从最高维[1],[8],[28],[28].来看,它的stride大小分别为:

结束!

511

被折叠的 条评论
为什么被折叠?



