mnist网络算子分析

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.

恰好 :

\\ 784\times 0 = 0 \\ 784\times 1= 784\\ 784\times2= 1568 \\ 784 \times 3=2352 \\ 784\times4=3136 \\ 784\times5=3920 \\ 784\times6=4704 \\ 784\times7=5488 \\ 784\times8=6272 \\ 784=28\times 28

也就是说每个28*28的矩阵,共用同一个偏置b,这就对的上了。因为如果28*28共用一个的化,共需要

\frac{1\times 8\times28\times 28}{28\times28} = 8

个偏置.

现在解释另一个数据, strides表示从每个维度来看,这个维度的数据长度。以array[1][8][28][28].为例,分别从最高维[1],[8],[28],[28].来看,它的stride大小分别为:


结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值