卷积神经网络学习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的矩阵, 因此, 每一层卷积神经网络的卷积核的个数, 也就是输出图像的通道数。

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

目录
相关文章
|
1天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
31 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
1天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
30 11
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1天前
|
机器学习/深度学习 人工智能 算法
深度学习中的卷积神经网络(CNN)入门与实践
【9月更文挑战第19天】在这篇文章中,我们将探索深度学习的一个重要分支——卷积神经网络(CNN)。从基础概念出发,逐步深入到CNN的工作原理和实际应用。文章旨在为初学者提供一个清晰的学习路径,并分享一些实用的编程技巧,帮助读者快速上手实践CNN项目。
|
1天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第19天】在人工智能的浩瀚星海中,卷积神经网络(CNN)如同一颗璀璨的星辰,照亮了图像处理的天空。本文将深入CNN的核心,揭示其在图像识别领域的强大力量。通过浅显易懂的语言和直观的比喻,我们将一同探索CNN的奥秘,并见证它如何在现实世界中大放异彩。
|
1天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
24 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3天前
|
SQL 安全 网络安全
网络安全与信息安全:保护你的数字世界##
网络安全和信息安全是现代社会中至关重要的话题。随着数字化进程的加速,网络攻击和数据泄露事件频发,给个人、企业乃至国家安全带来了巨大威胁。本文将探讨网络安全漏洞、加密技术以及安全意识等方面的关键知识,帮助你提升对网络安全的认知,保护自己的数字资产。 ##
21 5
|
1天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【9月更文挑战第19天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术以及安全意识等方面的知识,帮助读者更好地了解网络安全的重要性,提高自己的网络安全防护能力。
25 13
|
2天前
|
SQL 安全 算法
网络安全与信息安全:保护你的数字世界
【9月更文挑战第18天】在这个数字信息时代,网络安全和信息安全的重要性不言而喻。从网络漏洞的发现到加密技术的应用,再到安全意识的提升,每一个环节都至关重要。本文将深入探讨这些主题,并提供实用的建议和代码示例,以帮助读者更好地保护自己的数字世界。
21 11
|
3天前
|
人工智能 安全 算法
网络安全与信息安全:构建数字世界的防线
在数字化浪潮席卷全球的今天,网络安全与信息安全已成为维系社会秩序、保障个人隐私与企业机密的关键。本文旨在探讨网络安全漏洞的成因、加密技术的应用及安全意识的提升策略,以期为读者提供一个全面而深入的网络安全知识框架。
|
1天前
|
存储 安全 网络安全
云计算与网络安全的协同进化:探索云服务中的信息安全技术
【9月更文挑战第19天】 在数字化浪潮中,云计算已成为企业和个人存储、处理数据的心脏。然而,随着其广泛应用,网络安全问题亦步亦趋,成为制约云服务发展的关键因素。本文将深入探讨云计算环境下的网络安全挑战,分析当前信息安全技术的应对策略,并通过实际代码示例,揭示如何在云计算架构中实现安全加固。我们将一同见证,如何在数据流动与保护之间找到平衡点,确保云计算的健康稳定发展。

热门文章

最新文章