卷积神经网络学习1 - 卷积层

简介:

卷积神经网络常用于计算机视觉当中, 应用在计算机视觉当中, 就要面临一个挑战, 那就是输入数据非常的大, 假如输入图片一个1000 1000的, 那么他就有1000 1000 3(图片的RGB三通道)个数据, 对于300w的数据量, 那么当我们第一个隐藏层有1000个神经元进行全连接时, 那么将会有300w 1000个参数, 要训练30亿的参数, 不仅仅需要大量的图片, 还需要很好的计算平台来运算, 因此, 提出了卷积这一概念。

1. 卷积计算

卷积1
这是在网上down的一张动图, 他形象的表达了卷积的过程。

  • 左边 6 * 6的矩阵, 代表图片原始数据
  • 中间橙色的3 * 3的矩阵, 叫做卷积核,很多人也叫它滤波器或者过滤器
  • 右边4 * 4的矩阵, 就是卷积处理后的结果。

计算过程,取原始图像左上3 * 3的矩阵和卷积核进行点乘计算,计算结果再累加求和, 18 * 1 + 54 * 0 + 51 * 1 + 55 * 0 + 121 * 1 + 75 * 0 + 35 * 1 + 24 * 0 + 204 * 1 = 429 。然后, 原始图像上的3 * 3矩阵向右滑动一格, 同样和卷积核进行点乘累加求和操作, 得到505, 依次类推。

2. Padding

由上图的计算可知, 6 * 6的图像, 在使用3 * 3的卷积核进行卷积运算之后, 得到了一个4 * 4的输出, 当然, 我们可以把4 * 4的矩阵, 看作是一张图像, 那是因为你的3 * 3过滤器在6 * 6矩阵中,只可能有4 * 4种可能的位置。因此,如果我们有一个n * n的图像,用f * f的卷积核做卷积,那么输出的维度就是(n - f + 1) * (n - f + 1)。在这个例子里是6 - 3 + 1 = 4,因此得到了一个4 * 4的输出。
我们这样做其实并不好, 这样做有2个缺点。

  • 每次进行卷积操作, 图像都会缩小
  • 图像边缘数据(矩阵最外层的数据),只被使用过一次, 而中间的数据, 会多次和卷积核进行计算, 从而影响输出矩阵当中的多个值。 这样一来, 边缘数据的在输出中采用的较少, 也就意味着丢失了很多边缘数据信息。

那么, 我们怎么来避免这种事情的发生呢? 于是, 我们采用原始数据边缘补零操作, 也就是说在原始矩阵的外围补上一圈0, 那么 6 * 6的矩阵, 就被补成了 8 * 8的, 然后再进行卷积运算, 经过3 * 3的卷积核之后, 结果仍然为 6 * 6的, 和原始矩阵的大小一样, 并且, 原始数据的边缘数据也进行了多次使用, 虽然并不能完全和中间的数据一样进行多次使用, 但是却也在一定程度上降低了丢失数据的问题。

接下来, 我们定义一下:

  • 原始数据大小: n * n
  • 卷积核大小: f * f
  • 周围补零的圈数: p

对于补零操作, 有两种选择, 当 p = 0时(不进行补零), 我们叫它Valid卷积, 当 p > 0时, 我们叫它Same卷积。
因此:

  • Valid卷积: 已知输入 n * n, 卷积核 f * f, p = 0, 那么输出: (n - f + 1) × (n - f + 1)
  • Same卷积: 已知输入n * n, 卷积核 f * f, 输出 n * n, 那么 p = (f - 1) / 2

卷积核的f为啥总是奇数?

其实, 卷积核的大小, 并不是说不能为偶数, 但是更多情况下我们选择奇数更为合适。

  • f为偶数时, 在进行补零填充时, 左右两边不对等, 而不是左边填充多一些 , 右边填充少一些。
  • f为奇数时, 卷积核有一个中心像素点, 方便我们指出卷积核的位置。

3. 卷积步长(Strided convolutions)

卷积步长,就是说, 原始图像上的黄色矩阵每次向右移动的距离, 如下图所示, 步长为2. 此时 5 * 5的矩阵, 进过 3 * 3的卷积核进行卷积之后, 输出结果为 2* 2的矩阵。
卷积2
如果你用一个f×f的过滤器卷积一个 n * n的图像,你的padding为p,步幅为s,在这个例子中p = 0, s=2,你会得到一个输出,因为现在你不是一次移动一个步子,而是一次移动s个步子,输出于是变为 ((n + 2p − f) / s + 1) * ((n + 2p − f) / s + 1)

当步长大于1时, 会出现一个问题, 那就是(n + 2p − f) / s的商可能不是整数, 那么这种情况下, 我们一般进行向下取整操作, 也就是说, 你的 3 * 3的卷积核必须完全处于图像中或者填充之后的图像区域内才输出相应结果。

4. 三维卷积

上面我们介绍了对2维图像进行卷积, 接下来我们看一下如何对三维图像进行卷积操作。
对于一张彩图来说, 他有rgb三通道, 因此, 他的大小是 n * n * 3, 因此我们要对它进行卷积时, 卷积核就不能再选用 f * f的二维卷积核了, 我们需要选用 f * f * 3的三维卷积核, 3分别对应RGB三个通道。

假如, 我们的原始图像是一个 6 * 6 * 3的, 我们的卷积核采用 3 * 3 * 3的, 如下图所示:
_2017_12_22_16_21_21

_3

输入图像的的左上角的第一个 3 * 3 * 3的立方体,和卷积核进行计算之后, 得到的结果, 就是 4 * 4矩阵里面的第一个值, 依次类推, 此处应该注意的是, 经过卷积计算之后的结果, 是一个 4 * 4的二维矩阵, 并不是三维。

5. 单层卷积

上面我们看到了, 当我们有一个 6 * 6 * 3的矩阵时, 经过一个3 * 3 * 3的卷积核进行卷积计算之后, 得到了一个4 * 4的二维矩阵, 一个卷积核就相当于一个神经元, 那么一个卷几层会有多个神经元, 也就是有多个卷积核, 那么我有多个不同的3 * 3 * 3的卷积核 我就能计算得到多个不同的 4 * 4的矩阵.

总结一下: 假如我有一张 n * n * d(通道数)的输入数据, 然后和一个 f * f * d的卷积核进行same卷积,输出是一个n * n的二维矩阵, 当我和 d2f * f * d的卷积核进行same卷积, 输出是d2n * n的二维矩阵, 此时我们可以把这d2n * n的二维矩阵进行叠放, 那么就得到一个n * n * d2的矩阵, 因此, 每一层卷积神经网络的卷积核的个数, 也就是输出图像的通道数。

------------------未完---------------

目录
相关文章
|
8天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB2022a开发,提供无水印算法运行效果预览及核心程序(含详细中文注释与操作视频)。通过结合时间卷积神经网络(TCN)和遗传算法(GA),实现复杂非线性时间序列的高精度预测。TCN利用因果卷积层与残差连接提取时间特征,GA优化超参数(如卷积核大小、层数等),显著提升模型性能。项目涵盖理论概述、程序代码及完整实现流程,适用于金融、气象、工业等领域的时间序列预测任务。
|
19天前
|
机器学习/深度学习 算法 JavaScript
基于GA遗传优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于遗传算法优化的时间卷积神经网络(TCN)用于时间序列预测的方法。算法运行于 Matlab2022a,完整程序无水印,附带核心代码、中文注释及操作视频。TCN通过因果卷积层与残差连接学习时间序列复杂特征,但其性能依赖超参数设置。遗传算法通过对种群迭代优化,确定最佳超参数组合,提升预测精度。此方法适用于金融、气象等领域,实现更准确可靠的未来趋势预测。
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
128 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
2月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
159 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
22天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB 2022a实现了一种结合遗传算法(GA)优化的时间卷积神经网络(TCN)时间序列预测算法。通过GA全局搜索能力优化TCN超参数(如卷积核大小、层数等),显著提升模型性能,优于传统GA遗传优化TCN方法。项目提供完整代码(含详细中文注释)及操作视频,运行后无水印效果预览。 核心内容包括:1) 时间序列预测理论概述;2) TCN结构(因果卷积层与残差连接);3) GA优化流程(染色体编码、适应度评估等)。最终模型在金融、气象等领域具备广泛应用价值,可实现更精准可靠的预测结果。
|
2月前
|
人工智能 网络协议 IDE
使用通义灵码AI高效学习muduo网络库开发指南
Muduo 是一个基于 C++11 的高性能网络库,支持多线程和事件驱动,适用于构建高效的服务器和应用程序。它提供 TCP/IP 协议支持、异步非阻塞 I/O、定时器、异步日志等功能,并具备跨平台特性。通过 Git 克隆 muduo 仓库并切换至 C++17 分支可开始使用。借助 AI 工具如 Deepseak-v3,用户可以更便捷地学习和理解 Muduo 的核心模块及编写测试用例,提升开发效率。
|
2月前
|
机器学习/深度学习
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
96 11
|
10月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
10月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
8月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
131 9

热门文章

最新文章