深度卷积网络的实际应用

目录

1、三种经典的深度卷积网络

1.1、LeNet-5

1.2、AlexNet

1.3、VGG

2、残差网络

3、Inception 网络(Inception network)

4、迁移学习

5、数据增强


1、三种经典的深度卷积网络

1.1、LeNet-5

  •  使用 sigmoid 函数和 tanh 函数,而不是ReLu 函数,这篇论文中使用的正是 sigmoid 函数和 tanh 函数
  • LeNet-5 是针对灰度图片训练的,所以图片的大小只有 32×32×1
  • 6 5×5 的过滤器,步幅为 1 。由于使用了 6 个过滤器,步幅为 1 padding 0 ,输出结果为 28×28×6 , 图像尺寸从 32×32 缩小到 28×28 。然后进行池化操作
  • 接下来是卷积层,用一组 16 5×5 的过滤器,新的输出结果有 16 个通道
  • 池化层,高度和宽度再缩小一半,输出一个 5×5×16 的图像。将所有数字相 乘,乘积是 400
  • 全连接层,在全连接层中,有 400 个节点,每个节点有 120 个神经元,这里已 经有了一个全连接层。但有时还会从这 400 个节点中抽取一部分节点构建另一个全连接层, 就像这样,有 2 个全连接层
  • 最后一步就是利用这 84 个特征得到最后的输出,我们还可以在这里再加一个节点用来 预测𝑦^ 的值, 𝑦^ 10 个可能的值,对应识别 0-9 10 个数字

1.2、AlexNet

  • 实际上,这种神经网络与 LeNet 有很多相似之处,不过 AlexNet 要大得多。正如前面讲
    到的 LeNet LeNet-5 大约有 6 万个参数,而 AlexNet 包含约 6000 万个参数。当用于训练图 像和数据集时,AlexNet 能够处理非常相似的基本构造模块,这些模块往往包含着大量的隐藏单元或数据,这一点 AlexNet 表现出色。 AlexNet LeNet 表现更为出色的另一个原因是它使用了 ReLu 激活函数。 GPU 的处理速度还比较慢,所以 AlexNet 采用了非常复杂的 方法在两个 GPU 上进行训练。大致原理是,这些层分别拆分到两个不同的 GPU 上,同时还 专门有一个方法用于两个 GPU 进行交流

1.3、VGG

  • VGG-16 网络没有那么多超参数,这是一种只需要专注于构建卷积层的简单网络
  • VGG-16 的这个数字 16 ,就是指在这个网络中包含 16 个卷积层和全连接 层。确实是个很大的网络,总共包含约 1.38 亿个参数,即便以现在的标准来看都算是非常 大的网络。但 VGG-16 的结构并不复杂,这点非常吸引人,而且这种网络结构很规整,都是 几个卷积层后面跟着可以压缩图像大小的池化层,池化层缩小图像的高度和宽度。同时,卷积层的过滤器数量变化存在一定的规律,由 64 翻倍变成 128 ,再到 256 512 。作者可能认为 512 已经足够大了,所以后面的层就不再翻倍了。无论如何,每一步都进行翻倍,或者说在每一组卷积层进行过滤器翻倍操作,正是设计此种网络结构的另一个简单原则。这种相对一致的网络结构对研究者很有吸引力,而它的主要缺点是需要训练的特征数量非常巨大

2、残差网络

  • 非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题
  • 跳跃连接( Skip connection ),它可以从某一层网络层获取激活,然后迅速反馈给另外
    一层,甚至是神经网络的更深层
  • 可以利用跳跃连接构建能够训练深度网络的 ResNets , 有时深度能够超过 100
  • 在残差网络中有一点变化,我们将 𝑎 [𝑙] 直接向后,拷贝到神经网络的深层,在 ReLU 非线
    性激活函数前加上 𝑎 [𝑙] ,这是一条捷径。 𝑎 [𝑙] 的信息直接到达神经网络的深层,不再沿着主路
    径传递,这就意味着最后这个等式 ( 𝑎 [𝑙+2] = 𝑔(𝑧 [𝑙+2] ) ) 去掉了,取而代之的是另一个 ReLU 非 线性函数,仍然对𝑧 [𝑙+2] 进行 𝑔 函数处理,但这次要加上 𝑎 [𝑙] ,即: 𝑎 [𝑙+2] = 𝑔(𝑧 [𝑙+2] + 𝑎 [𝑙] ) , 也就是加上的这个𝑎 [𝑙]产生了一个残差块。ResNet 网络就是通过将很多这样的残差块堆积在一起,形成一个很深神经网络

3、Inception 网络(Inception network)

  • 构建卷积层时,要决定过滤器的大小究竟是 1×13×3 还是 5×5,或者要不要添加池化层。而 Inception 网络的作用就是代替你来决定,虽然网络架因此变得更加复杂,但网络表现却非常好
  • Inception 网络是由 Google 在 2014 年提出的一种卷积神经网络结构,用于解决深层网络中的梯度消失和参数爆炸问题。其中,1*1 的卷积被广泛应用于通道的压缩
  • 在 Inception 网络中,1*1 卷积被称为 Inception 模块的 1*1 分支。它主要用于降低网络的计算量和参数数量,同时也能够提高模型的表达能力。具体实现方式如下:

(1)、输入的特征图为 H * W * C ,其中 H 表示高度,W 表示宽度,C 表示通道数

(2)、通过使用 1*1 的卷积核,将输入的特征图进行通道的压缩。使用较小的通道数可以降低计算量和参数数量,同时也可以增加网络的非线性能力

(3)、1*1 卷积核的数量通常是根据需求进行设置的。例如,如果希望将输入特征图的通道数压缩为原来的一半,那么可以设置 1*1 卷积核的数量为 C/2

(4)、1*1 卷积的操作是逐像素进行的,即对于输入特征图的每个像素点,都会与 1*1 卷积核进行卷积运算

(5)、经过 1*1 卷积操作后,输出的特征图为 H * W * (C/2)

  • Inception网络模块

  • Inception网络

4、迁移学习

  •  如果有大量数据,应该做的就是用开源的网络和它的权重,把这、所有的权重当作初始化,然后训练整个网络。再次注意,如果这是一个 1000 节点的 softmax,而只有三个输出,需要自己的 softmax 输出层来输出你要的标签

5、数据增强

  • 数据增强是经常使用的一种技巧来提高计算机视觉系统的表现
  • 数据增强的方法:
(1)、 垂直镜像对称:假如,训练集中有这张图片,然后将其
翻转得到右边的图像

(2)、随机裁剪,给定一个数据集,然后开始随机裁剪,可能修剪这 个(编号 1),选择裁剪这个(编号 2),这个(编号 3),可以得到不同的图片放在数据集中,你的训练集中有不同的裁剪。随机裁剪并不是一个完美的数据增强的方法,如果你随机裁剪的那一部分(红色方框标记部分,编号 4),这部分看起来不像猫。但在实践中,这个方法还是很实用的,随机裁剪构成了很大一部分的真实图片

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

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

相关文章

freemarker学习

一、Freemarker引入 二、环境搭建和测试 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/m…

函数和控制流

专栏简介&#xff1a;本专栏作为Rust语言的入门级的文章&#xff0c;目的是为了分享关于Rust语言的编程技巧和知识。对于Rust语言&#xff0c;虽然历史没有C、和python历史悠远&#xff0c;但是它的优点可以说是非常的多&#xff0c;既继承了C运行速度&#xff0c;还拥有了Java…

ELK日志记录——Kibana组件——grok 正则捕获插件、mutate数据修改插件、multiline 多行合并插件、date 时间处理插件

grok 正则捕获插件 grok 使用文本片段切分的方式来切分日志事件 内置正则表达式调用 %{SYNTAX:SEMANTIC} ●SYNTAX代表匹配值的类型&#xff0c;例如&#xff0c;0.11可以NUMBER类型所匹配&#xff0c;10.222.22.25可以使用IP匹配。 ●SEMANTIC表示存储该值的一个变量声明&…

【Java】一只小菜坤的编程题之旅【2】

文章目录 1丶丑数2、各位相加3丶搜索插入位置4丶第一个错误的版本 1丶丑数 因为丑数只能被2&#xff0c;3&#xff0c;5整除&#xff0c;所以让n依次去除2&#xff0c;3&#xff0c;5&#xff0c;如果最后是n为1&#xff0c;就说明是丑数。 class Solution {public boolean is…

C语言实现扫雷【经典】

前言   本篇文章要实现的是扫雷游戏&#xff0c;其代码实现与上一篇的三子棋游戏类同&#xff0c;都是在棋盘的基础上&#xff0c;与电脑进行对抗&#xff0c;不同的是&#xff0c;扫雷游戏一开始电脑就已经随机布置好了所有“雷”。 请戳 --->三子棋 扫雷游戏 1. 扫雷游…

Kafka入门,offset的默认维护位置(二十一)

offset的默认维护位置 0.9版本之前&#xff1a;consumer默认将offset保持在zookeeper中 从0.9版本开始&#xff0c;consumer默认将offset保存在kafka一个内置的topic中&#xff0c;该topic为__consumer_offsets __consumer_offsets 主题里面采用key和value方式存储数据&#x…

SQL 删除重复的电子邮箱

196 删除重复的电子邮箱 SQL架构 表: Person -------------------- | Column Name | Type | -------------------- | id | int | | email | varchar | -------------------- id是该表的主键列。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。 删除 所有重复的电…

Spring Boot 中的 SQL 注入攻击是什么,原理,如何预防

Spring Boot 中的 SQL 注入攻击是什么&#xff0c;原理&#xff0c;如何预防 随着互联网的发展&#xff0c;Web 应用程序的数量不断增加&#xff0c;而 SQL 注入攻击也成为了常见的网络安全问题之一。SQL 注入攻击是通过在 Web 应用程序中注入恶意的 SQL 代码&#xff0c;从而…

【Android知识笔记】系统进程(一)

Android 系统进程有哪些 先来一个整体结构图从宏观上理解Android系统的进程结构布局: 这里我们简单总结一下: 系统的第一个进程其实是0号进程(又叫swapper进程/Idle进程) 0号进程fork出了1号进程(init进程)和2号进程(kthreadd进程) 1号进程是所有普通用户进程的祖先,2号进程…

03-2_Qt 5.9 C++开发指南_Qt全局定义、容器类、容器类的迭代器、Qt类库的模块

本篇简要介绍Qt全局定义中的数据类型、函数、宏定义&#xff1b;容器类中&#xff1a;顺序容器类、关联容器类&#xff1b;容器类的迭代器&#xff1b;Qt类库的模块。 文章目录 1.Qt全局定义1.1 数据类型定义1.2 函数1.3 宏定义1.3.1 QT_VERSION1.3.2 QT_VERSION_CHECK1.3.3 Q…

ModaHub魔搭社区:AI原生云向量数据库MIlvus Cloud实现 HNSW

实现 HNSW HNSW 并不简单,因此我们只在此处进行最简单的实现。像之前一样,我们首先创建一组(128 维)向量的数据集: >>> import numpy as np >>> dataset = np.random.normal(size=(1000, 128)) 第一步是构建 HNSW 索引。为此,我们需要将每个向量添加…

理清ROS通信的一些细节

目标&#xff1a;掌握ros的python编程 基本教程&#xff1a;https://www.bilibili.com/video/BV1sU4y1z7mw/?spm_id_from333.788&vd_source32148098d54c83926572ec0bab6a3b1d terminator 快捷键需要自己去重新启用 ctrlshifte 横向分屏 ctrlshifto 纵向分屏 ctrlshiftw …