卷积运算本质上就是在滤波器和输入数据的局部区域间做点积,最直观明了的方法就是用滑窗的方式,c++简单实现如下:

输入:imput[IC][IH][IW]
IC = input.channels
IH = input.height
IW = input.width卷积核: kernel[KC1][KC2][KH][KW]
KC1 = OC
KC2 = IC
KH = kernel.height
KW = kernel.width输出:output[OC][OH][OW]
OC = output.channels
OH = output.height
OW = output.width其中,padding = VALID,stride=1,
OH = IH - KH + 1
OW = IW - KW + 1for(int ch=0;ch<output.channels;ch++)
{for(int oh=0;oh<output.height;oh++){for(int ow=0;ow<output.width;ow++){float sum=0;for(int kc=0;kc<kernel.channels;kc++){for(int kh=0;kh<kernel.height;kh++){for(int kw=0;kw<kernel.width;kw++){sum += input[kc][oh+kh][ow+kw]*kernel[ch][kc][kh][kw];}}}//if(bias) sum +=bias[]output[ch][oh][ow]=sum;}}
}

直接用滑窗的方法计算卷积,效率比较低,因此一般把卷积操作转换为矩阵乘法。这样可以高效的利用优化之后的矩阵乘法,具体可以参考Caffe中的im2col的实现。

  • 在上图中, input features每一个二维矩阵对应与 RGB 图像的 channel 或者是 feature map 中的channel。
  • 目前常见的卷积都是 cross channel 的卷积, 既卷积核矩阵是 3 维的(width, height, depth), depth 的大小和feature map 的depth.(depth 就是有几张 feature map)。
  • 3维卷积核的方法与 2 维的类似, 也是与 feature map 中相应的一个 3 维的矩阵对应位置元素相乘积。然后相加,2 维的卷积相当于 depth=1 的 3 维的卷

下图阐述了简单的二维卷积实现,输入图像是3*3的RGB数据,组成12*4的矩阵,2个2*2(*3)卷积核,卷积核组成2*12的矩阵,输出矩阵维度为2*4。

最后,将得到的2*4重新reshape成2*2*2,即可。

内容主要来自与:

https://zhuanlan.zhihu.com/p/30086163

https://blog.csdn.net/gavin__zhou/article/details/72723494

http://courses.cs.tau.ac.il/Caffe_workshop/Bootcamp/pdf_lectures/Lecture%203%20CNN%20-%20backpropagation.pdf

转载于:https://www.cnblogs.com/hejunlin1992/p/8686838.html

卷积神经网络(CNN)中卷积的实现相关推荐

  1. 详细解释卷积神经网络CNN中卷积层以及BN层的参数

    问题的提出 在做关于python的卷积神经网络的项目中,发现了一个卷积层加一个BN层竟然一共有6个参数.百思不得其解. if batch_norm:layers += [nn.Conv2d(in_ch ...

  2. 花书+吴恩达深度学习(十)卷积神经网络 CNN 之卷积层

    目录 0. 前言 1. 2D 图像卷积 2. 3D 图像卷积 3. 过滤器(核函数) 4. 过滤器应用于边缘检测 5. padding 填充 6. stride 步长 7. 使用卷积的动机 8. 1乘 ...

  3. python 图像卷积_[卷积神经网络(CNN)中的卷积核到底是如何提取图像特征的(python实现图像卷积运算)]...

    1.前言 我们知道,卷积核(也叫滤波器矩阵)在卷积神经网络中具有非常重要的作用.说白了,CNN主要作用在于提取图像的各种特征图(feature maps). CNN主要是通过卷积运算来完成特征提取的. ...

  4. 卷积神经网络(CNN)——图像卷积

    一.为什么要对图像做卷积? 神经网络中的多层感知机(MLP)十分适合处理表格数据,其中行对应样本,列对应特征.正如我们之前使用 MLP 对 Fashion-MNIST 数据集进行训练和预测的那样,输入 ...

  5. 卷积神经网络CNN中1×1卷积作用理解

    0.引言 研究 GoogLeNet 和 VGG 神经网络结构的时候,都看见了它们在某些层有采取 1x1 作为卷积核,在最开始看到的AlexNet中都是出现了卷积核是 3x3和5×5的.那么,1x1 的 ...

  6. 卷积神经网络CNN——图像卷积与反卷积(后卷积,转置卷积)

    https://blog.csdn.net/fate_fjh/article/details/52882134

  7. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  8. 花书+吴恩达深度学习(十四)卷积神经网络 CNN 之经典案例(LetNet-5, AlexNet, VGG-16, ResNet, Inception Network)

    目录 0. 前言 1. LeNet-5 2. AlexNet 3. VGG-16 4. ResNet 残差网络 5. Inception Network 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  9. 花书+吴恩达深度学习(十三)卷积神经网络 CNN 之运算过程(前向传播、反向传播)

    目录 0. 前言 1. 单层卷积网络 2. 各参数维度 3. CNN 前向传播反向传播 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 ...

  10. 花书+吴恩达深度学习(十二)卷积神经网络 CNN 之全连接层

    目录 0. 前言 1. 全连接层(fully connected layer) 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 CNN ...

最新文章

  1. 【概率论与数理统计】假设检验
  2. Linux 内核中的 GCC 特性(zz)
  3. java 日期注解 xml_Spring xml注解+java注解
  4. 五分钟精通Oracle Hints
  5. Hadoop生态hive(二)安装
  6. linux svn 安装信息,linux 下安装 subversion(svn) 客户端
  7. SQL Server中的数据库表分区
  8. C语言中指针定义的字符串和数组定义的字符串的区别
  9. PyQt5多线程刷新界面防假死
  10. 关于电量采集芯片(库仑计)DS2781相关操作及配置
  11. Exce如何行内随机排序确定出场顺序
  12. 【IAR】 This device has been locked for debugging
  13. 软件项目管理相关(生存期模型、FP、PERT)
  14. 命主属性是水什么意思_八字五行属性查询表,有没有五行属性含水的且
  15. matlab偏最小二乘截距,matlab代写偏最小二乘回归(PLSR)和主成分回归(PCR)
  16. 关于函数不定积分的方法总结
  17. 玩转RFID(一) - MFRC522模块上手
  18. Vue2.5从零开发猫眼④——Home页开发
  19. mt6765和骁龙665哪个好_联发科MT6750和骁龙450哪个好 高通骁龙450与联发科MT6750区别对比评测...
  20. 2021年Java面试心得:java短信模板设计

热门文章

  1. mybaties专题
  2. PowerCmd(命令行增强工具) 2.2 免费版
  3. ZOJ - 3591 NIM
  4. 逃跑吧少年辅助快乐羊儿吧
  5. 设计模式---状态变化模式之备忘录模式(Memento)
  6. 深入理解Java虚拟机--中
  7. C++函数指针和类成员函数指针
  8. Vue.set()详解
  9. 命名空间函数用法及例子
  10. LeetCode--96. 不同的二叉搜索树(动态规划)