8000 GitHub - loongboys/conv: numpy实现卷积
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

loongboys/conv

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

一、卷积神经网络

卷积神经网络是一种常用的深度学习模型,通常用作图像处理方面的任务,如人脸识别、目标识别等。

本文整理了卷积操作特征图、卷积核的可训练参数等。

二、动画演示

卷积动画

三、卷积操作

  • 输入:7*7*3代表一张3通道的图。
  • 卷积核心:3*3*3*2。
  • 输出:3*3*2,步长是2,2,1,1

解释:其中前三个维度(3*3*3)代表一个卷积核参数,2代表2个核心。(3,3,3)的含义是(w,h,channel),其中channel代表输入的通道数。(3*3*3*2)的含义是(w,h,channel_in,channel_out)。channel_out表示进行卷积运算新生成“图像”的通道数。

3.1卷积的意义

3.1.1 二维滤波

卷积的作用是二维滤波,起到特征提取的作用。

3.1.2 特征图

卷积输出的结果,可以直接作为下一层卷积的输入,因此卷积生成结果被叫做“特征图”。

3.1.3 平移不变性

3.1.4 感受野

3.2 numpy实现动画中的卷积

本文用了动画实现卷积的方式,用了矩阵哈达玛积,结果求和,再遍历通道。代码如下:

temp += 
np.sum(padding_array[i*2:i*2+3,j*2:j*2+3,channel]*w_0[:,:,channel])

3.3 卷积操作

当编写完上面的代码,我就发现实现卷积的代码有问题,优先求哈达玛积 应转化为 矩阵相乘,将二维矩阵转换为一维矩阵。

(1,n)*(n*1)->(1,1)

遍历通道的相加,也转化为一维矩阵。

Sum{(3*3*3)*(3*3*3)}->(1,27)*(27*1)

3.4 卷积理解

通过实际编写代码,卷积操作也是矩阵乘法,相比较全连接网络,仅仅是减少了可训练参数。(对比全连接网络实现手写数字识别。)

单层卷积,可训练参数个数: $$whchannel_{in} * channel_{out}$$

四、总结

本文用最简单的方法实现了卷积操作,并有做优化,写死padding、stride等参数,但是通过编写代码,充分理解了卷积操作。特别希望对卷积不理解的同学,也尝试编写实验代码,一定会对卷积的含义有更深理解。

About

numpy实现卷积

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 100.0%
0