【笔记】深度学习入门:基于Python的理论与实现(六)

深度学习

深度学习是加深了层的深度神经网络

加深网络

本节我们将这些已经学过的技术汇总起来,创建一个深度网络,挑战 MNIST 数据集的手写数字识别

向更深的网络出发

  • 基于3×3的小型滤波器的卷积层。
  • 激活函数是ReLU。
  • 全连接层的后面使用Dropout层。
  • 基于Adam的最优化。
  • 使用He初始值作为权重初始值。
    在这里插入图片描述

进一步提高识别精度

可以发现进一步提高识别精度的技术和 线索。比如,集成学习、学习率衰减、Data Augmentation(数据扩充)等都有 助于提高识别精度。尤其是Data Augmentation,虽然方法很简单,但在提高 识别精度上效果显著,Data Augmentation基于算法“人为地”扩充输入图像(训练图像)

加深层的动机

这种比赛的结果显示,最近前几名 的方法多是基于深度学习的,并且有逐渐加深网络的层的趋势。也就是说, 可以看到层越深,识别性能也越高。
加深层的好处:

  • 可以减少网络的参数数量。

一次 5 × 5 的卷积运算的区域可以由两次 3 × 3 的卷积运算抵充。并且, 相对于前者的参数数量 25(5 × 5),后者(反向)一共是 18(2 × 3 × 3),通过叠加卷 积层,参数数量减少了。而且,这个参数数量之差会随着层的加深而变大。 比如,重复三次 3 × 3 的卷积运算时,参数的数量总共是 27。而为了用一次 卷积运算“观察”与之相同的区域,需要一个 7 × 7 的滤波器,此时的参数数 量是 49。
在这里插入图片描述

  • 使学习更加高效。

通过加深层,可以分层次地传递信息,这一点也很重要。比如,因为提 取了边缘的层的下一层能够使用边缘的信息,所以应该能够高效地学习更加 高级的模式。也就是说,通过加深层,可以将各层要学习的问题分解成容易 解决的简单问题,从而可以进行高效的学习。

深度学习的小历史

一般认为,现在深度学习之所以受到大量关注,其契机是 2012 年举办 的大规模图像识别大赛ILSVRC(ImageNet Large Scale Visual Recognition Challenge)。在那年的比赛中,基于深度学习的方法(通称 AlexNet)以压倒 性的优势胜出,彻底颠覆了以往的图像识别方法。2012 年深度学习的这场逆袭成为一个转折点,在之后的比赛中,深度学习一直活跃在舞台中央。

ImageNet

ImageNet 是拥有超过 100 万张图像的数据集。如图 8-7 所示,它包含 了各种各样的图像,并且每张图像都被关联了标签(类别名)。每年都会举办 使用这个巨大数据集的 ILSVRC 图像识别大赛。
在这里插入图片描述
这些年深度学习取得了不斐的成绩,其中 VGG、GoogLeNet、ResNet深度学习 已广为人知,在与深度学习有关的各种场合都会遇到这些网络

VGG

VGG 是由卷积层和池化层构成的基础的 CNN,它的特点在于将有权重的层(卷积层或者全连接层)叠加至 16 层(或者 19 层), 具备了深度(根据层的深度,有时也称为“VGG16”或“VGG19”)。

于 3×3 的小型滤波器的卷积层的运算是 连续进行的。重复进行“卷积层重叠 2 次到 4 次,再通过池化 层将大小减半”的处理,最后经由全连接层输出结果。
在这里插入图片描述

GoogLeNet

GoogLeNet 的特征是,网络不仅 在纵向上有深度,在横向上也有深度(广度),GoogLeNet 在横向上有“宽度”,这称为“Inception 结构”
在这里插入图片描述

Inception 结构使用了多个大小不同的滤波器(和池化), 最后再合并它们的结果。GoogLeNet 的特征就是将这个 Inception 结构用作 一个构件(构成元素),很多地方都使用了大小为1 × 1 的滤波器的卷积层。这个 1 × 1 的卷积运算通过在通道方向上减小大小,有助于减少参数和实现高速化处理
在这里插入图片描述

ResNet

我们已经知道加深层对于提升性能很重要。但是,在深度学习中,过度 加深层的话,很多情况下学习将不能顺利进行,导致最终性能不佳。ResNet 中, 为了解决这类问题,导入了“快捷结构”(也称为“捷径”或“小路”)。导入这 个快捷结构后,就可以随着层的加深而不断提高性能了(当然,层的加深也 是有限度的)。

在连续 2 层的卷积层中,将输入 x 跳着连接至 2 层后的输出。 这里的重点是,通过快捷结构,原来的 2 层卷积层的输出 F(x) 变成了 F(x) + x。 通过引入这种快捷结构,即使加深层,也能高效地学习。这是因为,通过快 捷结构,反向传播时信号可以无衰减地传递。
在这里插入图片描述

深度学习的高速化

大多数深度学习的框架都支持 GPU(Graphics Processing Unit),可以高速地处理大量的运算。另外,最 近的框架也开始支持多个 GPU 或多台机器上的分布式学习

需要努力解决的问题

从图中可知,AlexNex 中,大多数时间都被耗费在卷积层上。实际上, 卷积层的处理时间加起来占 GPU 整体的 95%,占 CPU 整体的 89% !因此, 如何高速、高效地进行卷积层中的运算是深度学习的一大课题
在这里插入图片描述

基于 GPU 的高速化

GPU 原本是作为图像专用的显卡使用的,但最近不仅用于图像处理, 也用于通用的数值计算。由于 GPU 可以高速地进行并行数值计算,因此 GPU 计算的目标就是将这种压倒性的计算能力用于各种用途

分布式学习

为了进一步提高深度学习所需的计算的速度,可以考虑在多个 GPU 或者多台机器上进行分布式计算。现在的深度学习框架中,出现了好几个支持 多 GPU 或者多机器的分布式学习的框架。其中,Google 的 TensorFlow、微 软的CNTK(Computational Network Toolki)在开发过程中高度重视分布式 学习。以大型数据中心的低延迟·高吞吐网络作为支撑,基于这些框架的分 布式学习呈现出惊人的效果。

基于TensorFlow的分布式学习的效果:横轴是GPU的个数,纵轴是与单个 GPU 相比时的高速化率
在这里插入图片描述

关于分布式学习,“如何进行分布式计算”是一个非常难的课题。它包 含了机器间的通信、数据的同步等多个无法轻易解决的问题。可以将这些难 题都交给 TensorFlow 等优秀的框架

运算精度的位数缩减

在深度学习的高速化中,除了计算量之外,内存容量、总线带宽等也有 可能成为瓶颈。关于内存容量,需要考虑将大量的权重参数或中间数据放在 内存中。关于总线带宽,当流经 GPU(或者 CPU)总线的数据超过某个限制时, 就会成为瓶颈。考虑到这些情况,我们希望尽可能减少流经网络的数据的位数。计算机中表示小数时,有 32 位的单精度浮点数和 64 位的双精度浮点数 等格式。根据以往的实验结果,在深度学习中,即便是 16 位的半精度浮点 数(half float),也可以顺利地进行学习,由此可以认为今后半精度浮点数将被作为标准使用。特别是在面向 嵌入式应用程序中使用深度学习时,位数缩减非常重要。

深度学习的应用案例

深度学习在图像、语音、自然语言等各个不同 的领域,深度学习都展现了优异的性能。以计算机视觉这个领域为中 心,介绍几个深度学习能做的事情(应用)

物体检测

物体检测是从图像中确定物体的位置,并进行分类的问题

物体检测是比物体识别更难的问题。之前介绍的物体 识别是以整个图像为对象的,但是物体检测需要从图像中确定类别的位置, 而且还有可能存在多个物体。
在这里插入图片描述

在使用 CNN 进行物体检测的方法中,有一个叫作 R-CNN 的有名的方法

图像分割

图像分割是指在像素水平上对图像进行分类

使用以像 素为单位对各个对象分别着色的监督数据进行学习。然后,在推理时,对输 入图像的所有像素进行分类。
在这里插入图片描述

要基于神经网络进行图像分割,最简单的方法是以所有像素为对象,对每个像素执行推理处理
有人提出了一个名为FCN(Fully Convolutional Network)[37] 的方法。该方法通过一次 forward 处理,对所有像素进行分类。
FCN 的字面意思是“全部由卷积层构成的网络”。相对于一般的 CNN 包 含全连接层,FCN 将全连接层替换成发挥相同作用的卷积层。

图像标题的生成

一个基于深度学习生成图像标题的代表性方法是被称为 NIC(Neural Image Caption)的模型,NIC由深层的CNN和处理自然语 言的RNN(Recurrent Neural Network)构成。RNN是呈递归式连接的网络, 经常被用于自然语言、时间序列数据等连续性的数据上。我们将组合图像和自然语言等多种信息进行的处理称为多模态处理

深度学习的未来

介绍几个揭示了深度学习的可能性和未来的研究

图像风格变换

如果指定将梵高的绘画风格应用于内容图像,深度学习 就会按照指示绘制出新的画作
在这里插入图片描述

图像的生成

DCGAN 中使用了深度学习,其技术要点是使用了 Generator(生成者) 和 Discriminator(识别者)这两个神经网络。Generator 生成近似真品的图 像,Discriminator 判别它是不是真图像(是 Generator 生成的图像还是实际 拍摄的图像)。像这样,通过让两者以竞争的方式学习,Generator 会学习到 更加精妙的图像作假技术,Discriminator 则会成长为能以更高精度辨别真假 的鉴定师。两者互相切磋、共同成长,这是GAN(Generative Adversarial Network)这个技术的有趣之处。在这样的切磋中成长起来的 Generator 最终
会掌握画出足以以假乱真的图像的能力(或者说有这样的可能)。
没有给出监督数据的问题称为无监督学习
前面我们学习的神经网络都有对应的监督数据称为监督学习

自动驾驶

在识别周围环境的技术中,深度学习的力量备受期待。比如,基于 CNN 的神经网络 SegNet,可以像图 8-25 那样高精度 地识别行驶环境。

基于深度学习的图像分割的例子:道路、车辆、建筑物、人行道等被高精度地识 别了出来
在这里插入图片描述

Deep Q-Network(强化学习)

就像人类通过摸索试验来学习一样(比如骑自行车),让计算机也在摸索 试验的过程中自主学习,这称为强化学习(reinforcement learning)。强化学 习和有“教师”在身边教的“监督学习”有所不同。 强化学习的基本框架是,代理(Agent)根据环境选择行动,然后通过这 个行动改变环境。根据环境的变化,代理获得某种报酬。强化学习的目的是 决定代理的行动方针,以获得更好的报酬。报酬并不是 确定的,只是“预期报酬”。比如,在《超级马里奥兄弟》这款电子游戏中, 让马里奥向右移动能获得多少报酬不一定是明确的。这时需要从游戏得分(获 得的硬币、消灭的敌人等)或者游戏结束等明确的指标来反向计算,决定“预 期报酬”。如果是监督学习的话,每个行动都可以从“教师”那里获得正确的评价。
在 Q 学习中,为了确定最合适的行动,需要确定一个被称为最优行动价值函数的函数。为了近似这个函数,DQN 使用了深度学习 (CNN)。

小结

深度学习领域还有很多尚未揭晓的东西,新的研究正一个接一个地出现。 今后,全世界的研究者和技术专家也将继续积极从事这方面的研究,一定能 实现目前无法想象的技术。

  • 对于大多数的问题,都可以期待通过加深网络来提高性能。
  • 在最近的图像识别大赛ILSVRC中,基于深度学习的方法独占鳌头,使用的网络也在深化。
  • VGG、GoogLeNet、ResNet等是几个著名的网络。
  • 基于GPU、分布式学习、位数精度的缩减,可以实现深度学习的高速化。
  • 深度学习(神经网络)不仅可以用于物体识别,还可以用于物体检测、图像分割。
  • 深度学习的应用包括图像标题的生成、图像的生成、强化学习等。最近,深度学习在自动驾驶上的应用也备受期待。

end
内容来自《深度学习入门:基于Python的理论与实现》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

varFormatter 数据格式化库 以性能优先的 快速的 内存对象格式转换

varFormatter 数据格式化 技术 开源技术栏 对象/变量格式化工具库,其支持将一个对象进行按照 JSON XML HTML 等格式进行转换,并获取到结果字符串! 目录 文章目录 varFormatter 数据格式化 技术目录介绍获取方式 使用实例格式化组件的基本使…

【C++初阶】内存管理

目录 一.C语言中的动态内存管理方式 二.C中的内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 3.浅识抛异常 (内存申请失败) 4.new和delete操作自定义类型 三.new和delete的实现原理 1.内置类型 2.自定义类型 一.C语…

电机应用-正点原子直流有刷电机例程笔记

目录 基础驱动实验:调速和换向 初始化工作 电机基础驱动API 电压、电流、温度检测实验 初始化工作 采集工作 编码器测速实验 编码器接口计数原理 初始化工作 编码器测速工作 速度环控制实现 PID相关函数 PID运算 电流环控制实现 PID相关函数 PID运算…

代码随想录算法训练营第三十三天|1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

1005.K次取反后最大化的数组和 刷题https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/文章讲解https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%96%E7%9A%84%E6%95%B0%E7%BB%84%E5%92%8C.…

iOS-设置指定边圆角(左上、左下等)

以UILabel举例,效果图如下: 代码如下: //设置左上与右下圆角(可自行编辑指定圆角位置) UIBezierPath *maskPath [UIBezierPath bezierPathWithRoundedRect:_sleepStateLabel.bounds byRoundingCorners:UIRectCornerT…

Python 全栈系列227 部署chatglm3-API接口

说明 上一篇介绍了基于算力租用的方式部署chatglm3, 见文章;本篇接着看如何使用API方式进行使用。 内容 1 官方接口 详情可见接口调用文档 调用有两种方式,SDK包和Http。一般来说,用SDK会省事一些。 以下是Python SDK包的git项目地址 安…

“环波罗的海”包围圈将正式形成

据“直新闻”的消息称,近日匈牙利国会同意了瑞典加入北约的申请,在走完相关后续程序后,瑞典就将成为北约第三十二个成员国,而北约对俄罗斯打造的“环波罗的海”包围圈也将正式形成,即除俄方外,波罗的海周边…

JEECG_ExcelExportServer批量数据导出超过60000条

项目上线了,结果导出数据时发现只能导出6w条,好奇怪啊... 本地试了试结果每次都卡在10w条. orz 开始扒拉批量导出 ExcelBatchExportServer server new ExcelBatchExportServer();server.init(exportParams,TTransLine.class);server.write(exportList);Workbook workbook s…

github如果给第三方项目提PR(Pull Request)

参考: https://blog.csdn.net/Leventcoco/article/details/135871779 1)第一步 先fork第三方项目 点击fork然后就同步一份到自己名下了,后续修改在自己名下这项目上先修改: 2)修改项目(要提交的新功能或…

阿里云幻兽帕鲁服务器怎么续费?阿里云服务器租用价格优惠有哪些?

阿里云幻兽帕鲁服务器的续费可以通过登录阿里云账户,访问ECS控制台页面来进行。首先,需要在控制台中找到想要续费的幻兽帕鲁服务器实例。接着,在控制台页面左侧导航栏中找到“费用中心”,点击进入,在费用中心页面中找到…

一个Web3项目的收官之作,必然是友好的用户界面(Web3项目三实战之四)

正如标题所述,一个对用户体验友好的应用,总是会赢得用户大加赞赏,这是毋庸置疑的。 甭管是web2,亦或是已悄然而至的Web3,能有一个外观优美、用户体验效果佳的的界面,那么,这个应用无疑是个成功的案例。 诚然,Web3项目虽然核心是智能合约攥写,但用户界面也是一个DApp不…

WSL2外部网络设置

1 关闭所有WSL系统 wsl --shutdown 2 打开Hyper-V管理器 3 将“虚拟交换机管理器”-> ”WSL连接类型“设置为“外部网络” 4 启动WSL系统,手动修改WSL网络 将WSL网络IP修改为192.168.1.9 sudo ip addr del $(ip addr show eth0 | grep inet\b | awk {print $2} |…

前端monorepo大仓共享复杂业务组件最佳实践

一、背景 在 Monorepo 大仓模式中,我们把组件放在共享目录下,就能通过源码引入的方式实现组件共享。越来越多的应用愿意走进大仓,正是为了享受这种组件复用模式带来的开发便利。这种方式可以满足大部分代码复用的诉求,但对于复杂…

C++基于多设计模式下的同步异步日志系统day2

📟作者主页:慢热的陕西人 🌴专栏链接:C基于多设计模式下的同步&异步日志系统 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要内容实现了日志代码设计的实…

【详识JAVA语言】方法签名

方法签名 在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢? 方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式: 方…

python3.x的在线与离线安装纯净版

由于计划搭建一套使用python自动分析日志的流程,发现我们的测试环境CentOS 7仍然没有安装python3,无法使用这些新的库。Python 3在设计上着重提升了语言的一致性和易用性,它引入了许多关键改进,此外,Python 3环境拥有丰…

Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析

3.2 自动配置 我们讲解了SpringBoot当中起步依赖的原理,就是Maven的依赖传递。接下来我们解析下自动配置的原理,我们要分析自动配置的原理,首先要知道什么是自动配置。 3.2.1 概述 SpringBoot的自动配置就是当Spring容器启动后&#xff0c…

项目-SERVER模块-Buffer模块

Buffer模块 一、Buffer模块是什么?实现思想是什么?二、代码实现如何设计:1.成员变量:2.构造函数:3.获取地址和空间大小4.读写偏移向后移动5.扩容函数6.写入函数7.读取函数8.获取地址和空间大小9.获取地址和空间大小10.…

springboot自写插件封包

在Spring Boot中自写插件或封包(通常指的是创建自定义的starter)是一种常见的做法,用于将一系列相关的配置和组件打包成一个独立的模块,从而简化依赖管理和配置过程。以下是一个简单的步骤,指导你如何创建一个自定义的…

如何高效管理项目:从规划到执行

导语:项目管理是一项复杂而重要的工作,涉及多个方面,包括规划、执行、监控和收尾。本文将介绍如何高效管理项目,从规划到执行,帮助您成功完成项目目标。 一、项目规划 项目规划是项目成功的关键。在规划阶段&#xff0…