卷积神经网络概述及示例教程

07619cca7712e28e0141d4ebf1d80553.png

来源:海豚数据科学实验室

22eea32f507c55bc092a4e2f7df6140a.png

研究人员在研究图像处理算法时提出了CNN(卷积神经网络)的概念。传统的全连接网络是一种黑盒子 - 它接收所有输入并通过每个值传递到一个dense 网络,然后再传递给一个热输出。这似乎适用于少量的输入。

当我们处理1024x768像素的图像时,我们输入3x1024x768 = 2359296个数字(每个像素的RGB值)。使用2359296个数字的输入向量的dense多层神经网络在第一层中每个神经元至少具有2359296个权重 - 第一层的每个神经元具有2MB的权重。对于处理器以及RAM,在20世纪90年代和2000年除,这几乎是不可能的。

这导致研究人员想知道是否有更好的方法来完成这项工作。任何图像处理(识别)中的第一个也是最重要的任务通常是检测边缘和纹理。接下来是识别和处理真实对象。很明显要注意检测纹理和边缘实际上并不依赖于整个图像。人们需要查看给定像素周围的像素以识别边缘或纹理。

此外,用于识别边缘或纹理的算法在整个图像中应该是相同的。我们不能对图像的中心或任何角落或侧面使用不同的算法。检测边缘或纹理的概念必须相同。我们不需要为图像的每个像素学习一组新参数。

这种理解导致了卷积神经网络。网络的第一层由扫描图像的小块神经元组成 - 一次处理几个像素。通常这些是9或16或25像素的正方形。

CNN非常有效地减少了计算量。小的“filter/kernel”沿着图像滑动,一次处理一小块。整个图像所需的处理非常相似,因此非常有效。

虽然它是为图像处理而引入的,但多年来,CNN已经在许多其他领域中得到应用。

一个例子

现在我们已经了解了CNN的基本概念,让我们了解数字的工作原理。正如我们所看到的,边缘检测是任何图像处理问题的主要任务。让我们看看CNN如何用于解决边缘检测问题。

54bb5ef095dc674fc33b0ac19464f61d.png

左边是16x16单色图像的位图。矩阵中的每个值表示相应像素的亮度。我们可以看到,这是一个简单的灰色图像,中间有一个方块。当我们尝试将其用2x2 filter(中图)进行卷积时,我们得到一个14x14的矩阵(右图)。

我们选择的filter 可以突出显示图像中的边缘。我们可以在右边的矩阵中看到,原始图像中与边缘对应的值是高的(正的或负的)。这是一个简单的边缘检测filter。研究人员已经确定了许多不同的filter,可以识别和突出图像的各个不同方面。在典型的卷积神经网络(CNN)模型开发中,我们让网络自己学习和发现这些filters。

重要概念

以下是我们在进一步使用CNN之前应该了解的一些重要概念。

Padding

卷积filter的一个明显问题是每一步都通过减小矩阵大小来减少“信息” - 缩小输出。基本上,如果原始矩阵是N×N,并且filter是F×F,则得到的矩阵将是(N-F + 1)×(N-F + 1)。这是因为边缘上的像素比图像中间的像素少。

如果我们在所有边上按(F - 1)/ 2像素填充图像,则将保留N×N的大小。

因此,我们有两种类型的卷积,即Valid Convolution和 Same Convolution。Valid 实质上意味着没有填充。因此每个卷积都会导致尺寸减小。Same Convolution使用填充,以便保留矩阵的大小。

在计算机视觉中,F通常是奇数。奇数F有助于保持图像的对称性,也允许一个中心像素,这有助于在各种算法中应用均匀偏差。因此,3x3, 5x5, 7x7 filter是很常见的。我们还有1x1个filter。

Strided

我们上面讨论的卷积是连续的,因为它连续扫描像素。我们也可以使用strides - 通过在图像上移动卷积filter时跳过s像素。

因此,如果我们有nxn图像和fxf filter并且我们用stride s和padding p进行卷积,则输出的大小为:((n + 2p -f)/ s + 1)x((n + 2p -f)/ s + 1)

卷积v / s互相关

互相关基本上是在底部对角线上翻转矩阵的卷积。翻转会将关联性添加到操作中。但在图像处理中,我们不会翻转它。

RGB图像上的卷积

现在我们有一个nxnx 3图像,我们用fxfx 3 filter进行卷积。因此,我们在任何图像及其filter中都有高度,宽度和通道数。任何时候,图像中的通道数量与filter中的通道数量相同。这个卷积的输出有宽度和高度(n-f + 1)和1通道。

多个filters

一个3通道图像与一个3通道filter卷积得到一个单一通道输出。但我们并不局限于一个filter。我们可以有多个filters——每个filter都会产生一个新的输出层。因此,输入中的通道数应该与每个filter中的通道数相同。filters的数量和输出通道的数量是一样的。

因此,我们从3个通道的图像开始,并在输出中以多个通道结束。这些输出通道中的每一个都表示图像的某些特定方面,这些方面由相应的filter拾取。因此,它也被称为特征而不是通道。在一个真正的深层网络中,我们还添加了一个偏差和一个非线性激活函数,如RelU。

池化层

池化基本上是将值组合成一个值。我们可以有平均池,最大池化,最小化池等。因此,使用fxf池化的nxn输入将生成(n/f)x(n/f)输出。它没有需要学习的参数。

211af6bc980b752c154b968f2d8f54c4.png

最大池化

CNN架构

典型的中小型CNN模型遵循一些基本原则。

f5d8d78cf5f0aa46a81238ff85dd7e6a.png

典型的CNN架构

  • 交替卷积和池化层

  • 逐渐减小frame 大小并增加frame 数,

  • 朝向末端的Flat 和全连接层

对所有隐藏层激活RelU,然后为最终层激活softmax

随着我们转向大型和超大型网络,事情变得越来越复杂。研究人员为我们提供了更多可以在这里使用的具体架构(如:ImageNet, GoogleNet和VGGNet等)。

Python实现

通常实现CNN模型时,先进行数据分析和清理,然后选择我们可以开始的网络模型。我们根据网络数量和层大小及其连接性的布局提供架构 - 然后我们允许网络自己学习其余部分。然后我们可以调整超参数来生成一个足以满足我们目的的模型。

让我们看一个卷积网络如何工作的简单例子。

导入模块

我们首先导入所需的Python库。

import numpy as np
import tensorflow as tf
from tensorflow import keras
from keras.layers import Dense, Conv2D, Flatten, MaxPooling2D
from keras.models import Sequential

23bc1a7427fd77f7d5043fb7ffb4626d.png

获取数据

下一步是获取数据。我们使用构建到Keras模块中的机器学习数据集——MNIST数据集。在现实生活中,这需要更多的处理。

我们加载训练和测试数据。我们reshape数据,使其更适合卷积网络。基本上,我们将其reshape为具有60000(记录数)大小为28x28x1的4D数组(每个图像的大小为28x28)。这使得在Keras中构建Convolutional层变得容易。

如果我们想要一个dense 神经网络,我们会将数据reshape为60000x784 - 每个训练图像的1D记录。但CNN是不同的。请记住,卷积的概念是2D - 因此没有必要将其flattening 为1维数组。

我们还将标签更改为分类的one-hot数组,而不是数字分类。最后,对图像数据进行归一化处理,以降低梯度消失的可能性。

(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
train_images = train_images.reshape(60000,28,28,1)
test_images = test_images.reshape(10000,28,28,1)
test_labels = tf.keras.utils.to_categorical(test_labels)
train_labels = tf.keras.utils.to_categorical(train_labels)
train_images = train_images / 255.0
test_images = test_images / 255.0

3136c06ac1a9a176b06cfa18e062d4b3.png

构建模型

Keras库为我们提供了准备使用API来构建我们想要的模型。我们首先创建Sequential模型的实例。然后,我们将层添加到模型中。第一层是卷积层,处理28x28的输入图像。我们将核大小定义为3并创建32个这样的核 - 创建32 frames 的输出 - 大小为26x26(28-3 + 1 = 26)

接下来是2x2的最大池化层。这将尺寸从26x26减小到13x13。我们使用了最大池化,因为我们知道问题的本质是基于边缘 - 我们知道边缘在卷积中显示为高值。

接下来是另一个核大小为3x3的卷积层,并生成24个输出frames。每frame的大小为22x22。接下来是卷积层。最后,我们将这些数据flatten 并将其输入到dense 层,该层具有对应于10个所需值的输出。

model = Sequential()
model.add(Conv2D(32, kernel_size=3, activation='relu', input_shape=(28,28,1)))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Conv2D(24, kernel_size=3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

dc2a2badd69b65d9aff0f210a5dafbca.png

训练模型

最后,我们用我们拥有的数据训练机器学习模型。五个epochs足以获得一个相当准确的模型。

model.fit(train_images, train_labels, validation_data=(test_images, test_labels), epochs=5)

a3d5b1634cdb14800d310cde748ebb5b.png

86998124c9631022e235df09954d7fab.png

最后

上面的模型只有9*32 + 9*24 = 504个值需要学习。全连接网络在第一层本身需要每个神经元784个权重!因此,我们大大节省了处理能力 - 同时降低了过度拟合的风险。

请注意,我们使用了我们所知道的,然后训练模型来发现其余部分。使用全连接或随机稀疏网络的黑盒方法永远不会以这个成本获得这样的准确性。

未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)大脑研究计划,构建互联网(城市)大脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。每日推荐范围未来科技发展趋势的学习型文章。目前线上平台已收藏上千篇精华前沿科技文章和报告。

  如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”

c3c2a4046ad8eb04a68a9ade17b0532c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为公布最新“十大发明”!

来源:华为“十大发明”旨在肯定和奖励有潜力开创新的产品系列、成为产品重要商业特性,并为公司和行业带来巨大商业价值的发明或专利技术。日前,华为在深圳举办2022创新和知识产权论坛,发布了2021年华为十大发明(Huawei…

毕业设计-课程设计-Spring+SpringMVC+Mybatis项目—企业权限管理系统(1)

JavaEE:SpringSpringMVCMybatis项目—企业权限管理系统 首先给出项目演示地址:http://www.youngxy.top:8080/SSM/ 项目架构图: 一:功能需求 1.1 商品查询 基于SSM整合基础上完成商品查询,要掌握主面页面main.jsp及商…

机器人技术中的人工智能:问题和解决方案

来源:ScienceAI机器人技术是一个多元化的行业,有很多变数。它的未来充满了不确定性:没有人能预测它未来几年的发展方向和方向。机器人技术也是一个不断增长的领域,有 500 多家公司致力于产品可分为四类:传统工业机器人…

任正非最新发言:鼓励胡说八道,系统工程不能搞垄断

来源 : 深城物联6月10日,华为“心声社区”微信公众号披露了任正非5月29日与系统工程领域科学家、专家会谈纪要。在会谈纪要的记录中,任正非分享了他对于系统工程的四方面见解。任正非提到,科学就是无尽的前沿,不要急功近利。国家重…

SpringBoot:如何处理SprintBoot提示Whitelabel Error Page以及了解原因?

目录 QUESTION:如何处理SprintBoot提示Whitelabel Error Page? ANSWER: 一:产生原因 二:如何处理 2.1Whitelabel Error Page 白页 2.2新建controller包 2.3成功运行 三:根本原因分析 QUESTION:如何处理SprintBo…

作为意识计算框架的主动推理

来源:CreateAMind作为意识计算框架的主动推理 (机器翻译约八千字)摘要最近,主动推理的机械框架被提出作为发展意识的支配性理论的原则基础,这将有助于解决该领域的概念差异(威斯2018;霍维和塞斯2020).为了证…

连接MySql出现异常解决:java.sql.SQLException: The server time zone value is unrecognized or represents。

QUESTION: java.sql.SQLException: The server time zone value �й���׼ʱ�� is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the s…

JSP和HTML中实现字符串换行

QUESTION:jsp中String字符串没有换行?怎样将含格式的String保持原有格式输出到html上? ANWSER: 目录 QUESTION:jsp中String字符串没有换行?怎样将含格式的String保持原有格式输出到html上? ANWSER: 方法…

一夜之间,谷歌AI就具有了「人格」,故事还炒得绘声绘色

来源:机器之心虽然谷歌表示不同意,还让提出这种说法的工程师「带薪休假」了。作为AI技术报道者,有点跟不上技术发展的速度了......一夜之间,谷歌AI就具有了人格,并且成功登上国内热搜。而这条消息也成功让众多网友也是…

阿里云服务器重启后无法访问的解决

QUESTION: 阿里云服务器重启后无法访问,可以PING通? ANWSER: 一、配置安全组 二、关闭防火墙 sudo systemctl stop firewalld 临时关闭 sudo systemctl disable firewalld ,然后reboot 永久关闭 sudo systemctl s…

21世纪八大新兴技术领域对美国战略威慑的影响

来源::兰德公司网站平台编辑:黄潇潇编译:沐俭,知远战略与防务研究所 【知远导读】本篇推送节选自兰德公司的报告《打破威慑——审视21世纪科技对战略威慑的影响》(Disrupting Deterrence:Examin…

让AI做决策,我们的社会准备好了吗?

来源:学术头条随着技术的加速发展,人工智能(AI)在决策过程中发挥着越来越重要的作用。人类越来越依赖算法来处理信息、推荐某些行为,甚至代表他们采取行动。但是,如果真的让 AI 帮助、甚至代替我们来做决策…

Linux下安装多个Tomcat服务器

目录 QUESTION:阿里云服务器Linux下安装多个Tomcat服务器的方法 ANSWER: 一、安装前的下载相关文件 1.1下载tomcat 1.2准备工具 二、登陆linux服务器进行安装 2.1将安装包上传到服务器 2.2解压和配置 2.3编辑环境变量 2.4生效文件 2.5修改catalina.sh 2.6修…

现在的人工智能是否走上了数学的极端?

来源:知乎—谢凌曦地址:https://www.zhihu.com/question/519393525/answer/2430233113“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑,为…

JUnit-4.12报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing异常的解决

目录 QUESTION:JUnit-4.12报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing异常的解决? ANWSER: 问题原因: 方法一: 方法二: QUESTION:JUnit-4.12报java.lang.NoClassDefFoundError: or…

谷歌丢弃 TensorFlow:豪赌 JAX

来源:云头条・谷歌是机器学习领域的开拓者,发布了其中一种最早的通用框架TensorFlow。・Meta发布AI框架PyTorch之后,TensorFlow逐渐失去了开发人员的青睐。・如今谷歌内部正押宝在一个取代TensorFlow的新AI项目JAX上。2015年,谷歌…

Lucene基本使用和代码实现

目录 Lucene:全文检索技术 一、Lucene的介绍 1.1背景 1.2优点 1.3Lucene的缺点 1.4全文检索 二、Lucene的基本使用流程 2.1Lucene检索过程 2.2获取文档 2.3分析文档(分词) 2.4创建索引 2.5查询索引 三、Lucene具体实现 3.1下载 3.2实际开发…

深度学习的坎坷六十年

来源:机器之心编辑:极市平台从1958年弗兰克.罗森布拉特发明的感知机、RNN、LeNet-5到Transformers等等,前人们一步一步的带动着深度学习往前跑。本文主要偏向于计算机视觉方向,带大家回想智慧凝结的每一个里程碑。1958 年&#xf…

全干货!机器学习通识篇知识分享

来源:海豚数据科学实验室机器学习(通识篇).机器学习定义机器学习(Machine Learning)本质上就是让计算机自己在数据中学习规律,并根据所得到的规律对未来数据进行预测。机器学习包括如聚类、分类、决策树、贝…

在弱肉强食的世界里,人类的美德意识为何能够超越其他物种?

来源:混沌巡洋舰本文摘编整理自《人性悖论:人类进化中的美德与暴力》 中信出版集团 2022年6月狭隘利他主义假设,战争可能导致自我牺牲,似乎只适用于其文化效应方面,而不能解释为进化上的选择力量。然而,该理…