用numpy手写算子
文章平均质量分 71
free1993
这个作者很懒,什么都没留下…
展开
-
im2col的卷积操作
对于一个卷积操作来说,输入有两个:四维tensor的输入[N,C,H,W],首先需要将四维向量变成一个二维的向量四维tensor的权重[OC,C,KH,KW],首先需要将四维向量变成一个二维的向量.输出是一个四维的向量[N, OC, OH, OW]变输入首先为了矩阵乘法,我们要把输入[N,C,H,W]的输入变成[NxOHxOW, CxKHxKW]的二维向量,此时的存储空间变为原来的OHxOW倍。这个变输入实际上是每次将卷积运算需要的数据展成行向量。def im2col(input_dat原创 2021-06-16 15:50:46 · 426 阅读 · 0 评论 -
用numpy库手写算子七:Dense_backward
用numpy库手写算子七:Dense_backward前言我们经常可以调用pytorch,tensorflow库等来实现我们的神经网络,但是有的时候需要开发自己的框架,这个时候就得了解每一个算子的计算规则,了解这些计算规则也有助于我们了解他们的计算特性,然后就可以在底层优化上面有一定的针对性。Dense_backwarddef dense_backward(dout, x, w, b): db = np.sum(dout, axis=0) dx = dout.dot(w.T)原创 2020-09-25 11:00:24 · 188 阅读 · 0 评论 -
用numpy库手写算子六:Dense
用numpy库手写算子六:Dense前言我们经常可以调用pytorch,tensorflow库等来实现我们的神经网络,但是有的时候需要开发自己的框架,这个时候就得了解每一个算子的计算规则,了解这些计算规则也有助于我们了解他们的计算特性,然后就可以在底层优化上面有一定的针对性。Densedense作为全连接层,主要是为了最后分类提取信息,因此可以说是最重要的一层了。def dense_forward_naive(x, w, b): out = x.dot(w) + b return out原创 2020-09-23 19:15:18 · 644 阅读 · 0 评论 -
用numpy库手写算子五: Depthwise_conv2d
用numpy库手写算子五: Depthwise_conv2d前言我们经常可以调用pytorch,tensorflow库等来实现我们的神经网络,但是有的时候需要开发自己的框架,这个时候就得了解每一个算子的计算规则,了解这些计算规则也有助于我们了解他们的计算特性,然后就可以在底层优化上面有一定的针对性。Depthwise_conv2d对于一个输入为(n,ic,h,w)的input,其本来的正常的卷积核为(oc,ic,kh,kw)。但是depthwise换成了(ic,1,kh,kw),然后加一个(oc,i原创 2020-09-23 19:04:33 · 519 阅读 · 0 评论 -
用numpy库手写算子四: avgPool
用numpy库手写算子四: avgPool前言我们经常可以调用pytorch,tensorflow库等来实现我们的神经网络,但是有的时候需要开发自己的框架,这个时候就得了解每一个算子的计算规则,了解这些计算规则也有助于我们了解他们的计算特性,然后就可以在底层优化上面有一定的针对性。avgPoolavgPool就是对一个h*w的小块,然后取这个小块的平均数值。总体代码def avgpool_forward_naive(x): out = np.zeros((x.shape[0], x.sh原创 2020-09-23 18:58:03 · 946 阅读 · 1 评论 -
用numpy库手写算子三: BN
用numpy库手写算子三: BN前言我们经常可以调用pytorch,tensorflow库等来实现我们的神经网络,但是有的时候需要开发自己的框架,这个时候就得了解每一个算子的计算规则,了解这些计算规则也有助于我们了解他们的计算特性,然后就可以在底层优化上面有一定的针对性。BNBatch_norm的基本运算是在channel的粒度上做了数据的归一化。因为每层的数据的范围和feature_map的数据范围是不一样的,因此如果不归一化,数据的范围会越差越大。输入说明对于BN的正向而言:x表示正向的输原创 2020-09-22 11:18:01 · 632 阅读 · 0 评论 -
用numpy库手写算子二 : Conv2d_backward
用numpy库手写算子一: Conv2d_backward前言我们经常可以调用pytorch,tensorflow库等来实现我们的神经网络,但是有的时候需要开发自己的框架,这个时候就得了解每一个算子的计算规则,了解这些计算规则也有助于我们了解他们的计算特性,然后就可以在底层优化上面有一定的针对性。Conv2d_backward一个算子的求导,包括两个方面:对Filter求导,这部分的求导作为之后更新梯度的梯度;对Input求导,也就是对每层的Featurre_map进行求导,作为链式求导中的一环向前原创 2020-09-21 16:52:53 · 1041 阅读 · 1 评论 -
用numpy库手写算子一 : Conv2d
用numpy库手写算子一:Conv2d前言我们经常可以调用pytorch,tensorflow库等来实现我们的神经网络,但是有的时候需要开发自己的框架,这个时候就得了解每一个算子的计算规则,了解这些计算规则也有助于我们了解他们的计算特性,然后就可以在底层优化上面有一定的针对性。Conv2d...原创 2020-09-21 16:18:03 · 1986 阅读 · 3 评论