当前位置: 首页 > news >正文

深度学习(2)-深度学习关键网络架构

关键网络架构

深度学习有4种类型的网络架构:密集连接网络、卷积神经网络、循环神经网络和Transformer。每种类型的模型都是针对特定的输入模式,网络架构包含了关于数据结构的假设,即模型搜索的假设空间。某种架构能否解决某个问题,完全取决于问题的数据结构与所选的网络架构假设之间是否匹配。

这些不同类型的网络可以很容易组合起来,实现更大的多模式模型,就像拼乐高积木一样。某种程度上来说,深度学习的层就是信息处理领域的乐高积木。下面列出了输入模式与网络架构之间的对应关系。
向量数据:密集连接网络(Dense层)​。
图像数据:二维卷积神经网络。
序列数据:对于时间序列,选择循环神经网络(RNN)​;对于离散序列(比如单词序列)​,选择Transformer。一维卷积神经网络也可用于平移不变的连续序列数据,比如鸟鸣波形。
视频数据:三维卷积神经网络(假设需要捕捉运动效果)​,或者帧级二维卷积神经网络(用于特征提取)再加上序列处理模型。立体数据:三维卷积神经网络。下面来快速回顾一下每种网络架构的特点。

密集连接网络

密集连接网络是Dense层的堆叠,用于处理向量数据(每个样本都是一个数值向量或分类向量)​。这类网络假设输入特征中没有特定结构:之所以叫密集连接,是因为Dense层的每个单元都与其他所有单元相连。该层试图映射任意两个输入特征之间的关系,它与二维卷积层不同,后者仅关注局部关系。

密集连接网络最常用于分类数据(比如输入特征是属性的列表)​,如第波士顿房价数据集。它还用于大多数网络的最终分类或回归,比如卷积神经网络或循环神经网络,最后通常是一两个Dense层。

对于二分类问题,层堆叠的最后一层应该是使用sigmoid激活函数且只有一个单元的Dense层,并使用binary_crossentropy作为损失函数。目标应该是0或1。

from tensorflow import keras
from tensorflow.keras import layers
inputs = keras.Input(shape=(num_input_features,))
x = layers.Dense(32, activation="relu")(inputs)
x = layers.Dense(32, activation="relu")(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="binary_crossentropy")

对于单标签、多分类问题(每个样本只对应一个类别)​,层堆叠的最后一层应该是一个Dense层,它使用softmax激活函数,其单元个数等于类别个数。如果目标采用的是one-hot编码,则使用categorical_crossentropy作为损失函数;如果目标是整数,则使用sparse_categorical_crossentropy作为损失函数。

inputs = keras.Input(shape=(num_input_features,))
x = layers.Dense(32, activation="relu")(inputs)
x = layers.Dense(32, activation="relu")(x)
outputs = layers.Dense(num_classes, activation="softmax")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="categorical_crossentropy")

对于连续值向量的回归问题,层堆叠的最后一层应该是不使用激活函数的Dense层,其单元个数等于要预测的值的个数(通常只有一个值,比如房价)​。有几种损失函数可用于回归问题,最常用的是mean_squared_error(均方误差,MSE)​。

inputs = keras.Input(shape=(num_input_features,))
x = layers.Dense(32, activation="relu")(inputs)
x = layers.Dense(32, activation="relu")(x)
outputs layers.Dense(num_values)(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="mse")

卷积神经网络

卷积层能够查看空间局部模式,其方法是对输入张量的不同空间位置(图块)应用相同的几何变换。这样得到的表示具有平移不变性,这使得卷积层能够高效利用数据,并且可以模块化。这个想法适用于任意维度,包括一维(连续序列)​、二维(图像数据)​、三维(立体数据)等。你可以使用Conv1D层来处理序列数据,使用Conv2D层来处理图像数据,使用Conv3D层来处理立体数据。你还可以使用深度可分离卷积层,比如SeparableConv2D层,它比卷积层更精简、更高效。

卷积神经网络是卷积层和最大汇聚层的堆叠。汇聚层可以对数据进行空间下采样,这样做有两个目的:随着特征数量增加,让特征图的尺寸保持在合理范围内;让后续卷积层能够“看到”输入中更大的空间范围。卷积神经网络的最后通常是Flatten运算或全局汇聚层,将空间特征图转换为向量,然后再使用Dense层实现分类或回归。典型的图像分类网络(本例是多分类)如下所示,其中用到了SeparableConv2D层。

inputs = keras.Input(shape=(height, width, channels))
x = layers.SeparableConv2D(32, 3, activation="relu")(inputs)
x = layers.SeparableConv2D(64, 3, activation="relu")(x)
x = layers.MaxPooling2D(2)(x)
x = layers.SeparableConv2D(64, 3, activation="relu")(x)
x = layers.SeparableConv2D(128, 3, activation="relu")(x)
x = layers.MaxPooling2D(2)(x)
x = layers.SeparableConv2D(64, 3, activation="relu")(x)
x = layers.SeparableConv2D(128, 3, activation="relu")(x)
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dense(32, activation="relu")(x)
outputs = layers.Dense(num_classes, activation="softmax")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="categorical_crossentropy")

在构建非常深的卷积神经网络时,通常会添加批量规范化和残差连接。这两种架构模式有助于梯度信息在网络中顺利传播。

循环神经网络

循环神经网络(RNN)的工作原理是,对输入序列每次处理一个时间步,并且始终保存一个状态(这个状态通常是一个向量或一组向量)​。如果序列中的模式不具有时间平移不变性(比如时间序列数据,最近的过去比遥远的过去更重要)​,那么应该优先使用循环神经网络,而不是一维卷积神经网络。

Keras中有3种循环层:SimpleRNN、GRU和LSTM。对于大多数实际用途,你应该使用GRU或LSTM。二者之中,LSTM更强大,计算代价也更大。你可以将GRU看作一种更简单、计算代价更小的替代方法。要将多个RNN层逐个堆叠,最后一层之前的每一层都应该返回完整的输出序列(每个输入时间步都对应一个输出时间步)​。如果只有一个RNN层,则通常只返回最后一个输出,其中包含关于整个序列的信息。
下面是单一的RNN层,用于向量序列的二分类。

inputs = keras.Input(shape=(num_timesteps, num_features))
x = layers.LSTM(32)(inputs)
outputs = layers.Dense(num_classes, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="binary_crossentropy")

下面是RNN层的堆叠,用于向量序列的二分类。

inputs = keras.Input(shape=(num_timesteps, num_features))
x = layers.LSTM(32, return_sequences=True)(inputs)
x = layers.LSTM(32, return_sequences=True)(x)
x = layers.LSTM(32)(x)
outputs = layers.Dense(num_classes, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="binary_crossentropy")

Transformer

Transformer查看一组向量(比如词向量)​,并利用神经注意力将每个向量转化为一个具有上下文感知的表示,这个上下文由这组向量中的其他向量所提供。对于有序序列,你也可以利用位置编码来构建一个同时考虑全局上下文和词序的Transformer。它对长文本段落的处理比循环神经网络或一维卷积神经网络更高效。

Transformer可用于任何集合处理任务或序列处理任务(包括文本分类)​,尤其擅长序列到序列学习,比如将源语言的段落翻译成目标语言。

序列到序列Transformer由以下两部分组成。
TransformerEncoder(Transformer编码器)​:将输入向量序列转化为上下文感知且顺序感知的输出向量序列。

TransformerDecoder(Transformer解码器)​:接收TransformerEncoder的输出和目标序列,并预测目标序列的后续内容。

如果仅处理单一向量序列(或向量集合)​,那么可以只使用TransformerEncoder。

下面是一个序列到序列Transformer,它将源序列映射到目标序列(这种设置可用于机器翻译或问题回答)​。

encoder_inputs = keras.Input(shape=(sequence_length,), dtype="int64")----源序列
x = PositionalEmbedding(sequence_length, vocab_size, embed_dim)(encoder_inputs)
encoder_outputs = TransformerEncoder(embed_dim, dense_dim, num_heads)(x)
decoder_inputs = keras.Input(shape=(None,), dtype="int64")----当前的目标序列
x = PositionalEmbedding(sequence_length, vocab_size, embed_dim)(decoder_inputs)
x = TransformerDecoder(embed_dim, dense_dim, num_heads)(x, encoder_outputs)
decoder_outputs = layers.Dense(vocab_size, activation="softmax")(x)----向后偏移一个时间步的目标序列
transformer = keras.Model([encoder_inputs, decoder_inputs], decoder_outputs)
transformer.compile(optimizer="rmsprop", loss="categorical_crossentropy")

下面是一个仅使用TransformerEncoder对整数序列进行二分类的例子。

inputs = keras.Input(shape=(sequence_length,), dtype="int64")
x = PositionalEmbedding(sequence_length, vocab_size, embed_dim)(inputs)
x = TransformerEncoder(embed_dim, dense_dim, num_heads)(x)
x = layers.GlobalMaxPooling1D()(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="binary_crossentropy")

相关文章:

深度学习(2)-深度学习关键网络架构

关键网络架构 深度学习有4种类型的网络架构:密集连接网络、卷积神经网络、循环神经网络和Transformer。每种类型的模型都是针对特定的输入模式,网络架构包含了关于数据结构的假设,即模型搜索的假设空间。某种架构能否解决某个问题&#xff0…...

【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(8-15)

【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(下) 2.8 Cadence 软件自带元件库2.9 原理图元器件关联PCB2.10 原理图元器件库的移植2.11 已有原理图输出元器件库2.12 原理图设计中调用元器件库2.13 原理图元器件库关…...

【Linux网络编程】IP协议格式,解包步骤

目录 解析步骤 1.版本字段(大小:4比特位) 2.首部长度(大小:4比特位)(单位:4字节) 🍜细节解释: 3.服务类型(大小:8比特…...

给老系统做个安全检查——Burp SqlMap扫描注入漏洞

背景 在AI技术突飞猛进的今天,类似Cursor之类的工具已经能写出堪比大部分程序员水平的代码了。然而,在我们的代码世界里,仍然有不少"老骥伏枥"的系统在兢兢业业地发光发热。这些祖传系统的代码可能早已过时,架构可能岌…...

Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory

安装C 简介 Windows 版的 GCC 有三个选择: CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系统上运行的工具集,用于在 Windows 环境下进行开发和编译。 Cygwin 是一个在 Windows 上运行的开源项目,旨在提供类Uni…...

开源免费文档翻译工具 可支持pdf、word、excel、ppt

项目介绍 今天给大家推荐一个开源的、超实用的免费文档翻译工具(DeeplxFile),相信很多人都有需要翻译文档的时刻,这款工具就能轻松解决你的需求。 它支持多种文档格式翻译,包括 Word、PDF、PPT、Excel ,使…...

从CNN到Transformer:遥感影像目标检测的未来趋势

文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践(遥感图像场景分类)专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…...

【GORM学习笔记】GORM介绍以及增删改查相关操作

优缺点 优点:提高开发效率,防止SQL注入、对不熟悉SQL语句的人友好、代码统一缺点:牺牲执行能力、牺牲灵活性、弱化SQL能力 在一些小型项目上使用ORM可以大大提高开发效率,但是在一些对性能要求高得场景下,ORM可能没有…...

WebSocket在分布式环境中的局限性及解决方案

WebSocket 在分布式环境中存在一些局限性,特别是当系统需要扩展多个服务实例时,单个 WebSocket 连接的管理和消息推送就变得比较复杂。因此,必须采取一些额外的措施来确保 WebSocket 能在多个服务实例之间正确工作。 WebSocket 在分布式环境…...

SIM盾构建安全底座的可行性分析

一、背景 1.1安全需求现状 在数字化时代,信息安全面临着日益严峻的挑战。各类网络攻击手段层出不穷,如数据泄露、恶意软件攻击、网络诈骗等,给个人、企业和社会带来了巨大的损失。为了保障信息系统的安全性,需要构建一个可靠的安…...

【Java八股文】10-数据结构与算法面试篇

【Java八股文】10-数据结构与算法面试篇 数据结构与算法面试题数据结构红黑树说一下跳表说一下?LRU是什么?如何实现?布隆过滤器怎么设计?时间复杂度? 排序算法排序算法及空间复杂度 数据结构与算法面试题 数据结构 红…...

go 并发 gorouting chan channel select Mutex sync.One

goroutine // head&#xff1a; 前缀 index&#xff1a;是一个int的指针 func print(head string, index *int) {for i : 0; i < 5; i {// 指针对应的int *indexfmt.Println(*index, head, i)// 暂停1stime.Sleep(1 * time.Second)} }/* Go 允许使用 go 语句开启一个新的运…...

亲测Windows部署Ollama+WebUI可视化

一. Ollama下载 登录Ollama官网(Ollama)点击Download进行下载 如果下载很慢可用以下地址下载&#xff1a; https://github.com/ollama/ollama/releases/download/v0.5.7/OllamaSetup.exe 在DeepSeek官网上&#xff0c;你可以直接点击【model】 到达这个界面之后&#xff0c;…...

linux 安装启动zookeeper全过程及遇到的坑

1、下载安装zookeeper 参考文章&#xff1a;https://blog.csdn.net/weixin_48887095/article/details/132397448 2、启动失败 1、启动失败JAVA_HOME is not set and java could not be found in PATH 已安装 JAVA 配置了JAVA_HOME,还是报错解决方法&#xff1a;参考&#xf…...

策略模式Spring框架下开发实例

策略类Spring框架下开发实例 先列出策略模式下需要那些类: 策略接口 (Strategy)&#xff0c;定义所有策略类必须遵循的行为。 具体策略类&#xff08;如 ConcreteStrategyA、ConcreteStrategyB&#xff09;&#xff0c;实现不同的算法或行为。 上下文类 (Context)&#xff0c;…...

DeepSeek模型量化

技术背景 大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;&#xff0c;可以通过量化&#xff08;Quantization&#xff09;操作来节约内存/显存的使用&#xff0c;并且降低了通讯开销&#xff0c;进而达到加速模型推理的效果。常见的就是把Float16的浮…...

【练习】【回溯:组合:不同集合】力扣 17. 电话号码的字母组合

题目 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “2…...

分布式文件系统HDFS

一、HDFS简介 HDFS&#xff08; Hadoop Distributed File System &#xff09;&#xff0c;意为&#xff1a;Hadoop分布式文件系统。是Apache Hadoop核心组件之一&#xff0c;作为大数据生态圈最底层的分布式存储服务而存在。分布式文件系统解决大数据如何存储问题。分布式意味…...

从WebRTC到EasyRTC:嵌入式适配的视频通话SDK实现低延迟、高稳定性音视频通信

WebRTC最初是为浏览器之间的实时通信设计的&#xff0c;其资源需求和复杂性可能对嵌入式设备的性能提出较高要求&#xff0c;因此在嵌入式系统中应用时面临一些挑战&#xff1a; 1&#xff09;资源消耗较高 CPU和内存占用&#xff1a;WebRTC是一个功能强大的实时通信框架&…...

WordPress自定义排序插件:Simple Custom Post Order完全指南(SEO优化版)

在WordPress建站中&#xff0c;文章、分类目录或页面的默认排序方式往往无法满足个性化需求。WordPress自定义排序插件&#xff1a;Simple Custom Post Order插件&#xff0c;你可以轻松实现拖拽式自定义排序&#xff0c;无需修改代码即可优化内容展示逻辑。本文将详细介绍这款…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...