前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >numpy实现卷积操作

numpy实现卷积操作

作者头像
birdskyws
发布2019-04-01 15:09:48
4.5K0
发布2019-04-01 15:09:48
举报
文章被收录于专栏:一英里广度一英寸深度的学习

一、卷积神经网络

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

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

二、动画演示

卷积动画

三、卷积操作

  • 输入: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实现动画中的卷积

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

代码语言:javascript
复制
temp += 
np.sum(padding_array[i*2:i*2+3,j*2:j*2+3,channel]*w_0[:,:,channel])

完整代码https://github.com/birdskyws/conv

3.3 卷积操作

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

代码语言:javascript
复制
(1,n)*(n,1)->(1,1)

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

代码语言:javascript
复制
Sum{(3,3,3)*(3,3,3)}->(1,27)*(27,1)

3.4 卷积理解

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

单层卷积,可训练参数个数:

w*h*channel_{in} * channel_{out}
w*h*channel_{in} * channel_{out}

四、总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.03.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、卷积神经网络
  • 二、动画演示
  • 三、卷积操作
    • 3.1卷积的意义
      • 3.1.1 二维滤波
      • 3.1.2 特征图
      • 3.1.3 平移不变性
      • 3.1.4 感受野
    • 3.2 numpy实现动画中的卷积
      • 3.3 卷积操作
        • 3.4 卷积理解
        • 四、总结
        相关产品与服务
        人脸识别
        腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档