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

深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解

随着深度学习技术的不断发展,神经网络架构变得越来越复杂,而这些复杂网络在训练时常常遇到梯度消失、梯度爆炸以及计算效率低等问题。为了克服这些问题,研究者们提出了多种网络架构,包括 残差网络(ResNet)加权残差连接(WRC)跨阶段部分连接(CSP)

本文将详细介绍这三种网络架构的基本概念、工作原理以及如何在 PyTorch 中实现它们。我们会通过代码示例来展示每个技术的实现方式,并重点讲解其中的核心部分。

目录

一、残差网络(ResNet)

1.1 残差网络的背景与原理

1.2 残差块的实现

重点

二、加权残差连接(WRC)

2.1 WRC的提出背景

2.2 WRC的实现

重点

三、跨阶段部分连接(CSP)

3.1 CSP的提出背景

3.2 CSP的实现

重点

四、总结


一、残差网络(ResNet)

1.1 残差网络的背景与原理

有关于残差网络,详情可以查阅以下博客,更为详细与新手向:

YOLO系列基础(三)从ResNet残差网络到C3层-CSDN博客

深层神经网络的训练常常遭遇梯度消失或梯度爆炸的问题,导致训练效果不好。为了解决这一问题,微软的何凯明等人提出了 残差网络(ResNet),引入了“跳跃连接(skip connections)”的概念,使得信息可以直接绕过某些层传播,从而避免了深度网络训练中的问题。

在传统的神经网络中,每一层都试图学习输入到输出的映射。但在 ResNet 中,网络不再直接学习从输入到输出的映射,而是学习输入与输出之间的“残差”,即

H(x) = F(x) + x

其中 F(x) 是网络学到的残差部分,x 是输入。

这种方式显著提升了网络的训练效果,并且让深层网络的训练变得更加稳定。

1.2 残差块的实现

下面是一个简单的残差块实现,它包括了两层卷积和一个跳跃连接。跳跃连接帮助保持梯度的流动,避免深层网络中的梯度消失问题。

图例如下:

代码示例如下:

import torch
import torch.nn as nn
import torch.nn.functional as F# 定义残差块
class ResidualBlock(nn.Module):def __init__(self, in_channels, out_channels):super(ResidualBlock, self).__init__()self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1)self.bn1 = nn.BatchNorm2d(out_channels)self.bn2 = nn.BatchNorm2d(out_channels)# 如果输入和输出的通道数不同,则使用1x1卷积调整尺寸if in_channels != out_channels:self.shortcut = nn.Conv2d(in_channels, out_channels, kernel_size=1)else:self.shortcut = nn.Identity()def forward(self, x):out = F.relu(self.bn1(self.conv1(x)))  # 第一层卷积后激活out = self.bn2(self.conv2(out))        # 第二层卷积out += self.shortcut(x)                # 残差连接return F.relu(out)                     # ReLU激活# 构建ResNet
class ResNet(nn.Module):def __init__(self, num_classes=10):super(ResNet, self).__init__()self.layer1 = ResidualBlock(3, 64)self.layer2 = ResidualBlock(64, 128)self.layer3 = ResidualBlock(128, 256)self.fc = nn.Linear(256, num_classes)def forward(self, x):x = self.layer1(x)x = self.layer2(x)x = self.layer3(x)x = F.adaptive_avg_pool2d(x, (1, 1))  # 全局平均池化x = torch.flatten(x, 1)                # 展平x = self.fc(x)                         # 全连接层return x# 示例:构建一个简单的 ResNet
model = ResNet(num_classes=10)
print(model)
重点
  1. 残差连接的实现:在 ResidualBlock 类中,out += self.shortcut(x) 实现了输入与输出的加法操作,这是残差学习的核心。
  2. 处理输入和输出通道数不一致的情况:如果输入和输出的通道数不同,通过使用 1x1 卷积调整输入的维度,确保加法操作能够进行。

二、加权残差连接(WRC)

2.1 WRC的提出背景

传统的残差网络通过简单的跳跃连接将输入和输出相加,但在某些情况下,不同层的输出对最终结果的贡献是不同的。为了让网络更灵活地调整各层贡献,加权残差连接(WRC) 引入了可学习的权重。公式如下

H(x) =\alpha F(x) + \beta x

其中 F(x) 是网络学到的残差部分,x 是输入,\alpha 和 \beta是权重。

WRC通过为每个残差连接引入可学习的权重 \alpha\beta,使得网络能够根据任务需求自适应地调整每个连接的贡献。

2.2 WRC的实现

以下是 WRC 的实现代码,我们为每个残差连接引入了权重参数 alphabeta,这些参数通过训练进行优化。

图例如下:

可以看到,加权残差快其实就是给残差网络的两条分支加个权而已 

代码示例如下: 

class WeightedResidualBlock(nn.Module):def __init__(self, in_channels, out_channels):super(WeightedResidualBlock, self).__init__()self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1)self.bn1 = nn.BatchNorm2d(out_channels)self.bn2 = nn.BatchNorm2d(out_channels)# 权重初始化self.alpha = nn.Parameter(torch.ones(1))  # 可学习的权重self.beta = nn.Parameter(torch.ones(1))   # 可学习的权重# 如果输入和输出的通道数不同,则使用1x1卷积调整尺寸if in_channels != out_channels:self.shortcut = nn.Conv2d(in_channels, out_channels, kernel_size=1)else:self.shortcut = nn.Identity()def forward(self, x):out = F.relu(self.bn1(self.conv1(x)))out = self.bn2(self.conv2(out))# 加权残差连接:使用可学习的权重 alpha 和 betaout = self.alpha * out + self.beta * self.shortcut(x)return F.relu(out)# 示例:构建一个加权残差块
model_wrc = WeightedResidualBlock(3, 64)
print(model_wrc)
重点
  1. 可学习的权重 alphabeta:我们为残差块中的两个加法项(即残差部分和输入部分)引入了可学习的权重。通过训练,这些权重可以自动调整,使网络能够根据任务需求更好地融合输入和输出。

  2. 加权残差连接的实现:在 forward 方法中,out = self.alpha * out + self.beta * self.shortcut(x) 表示加权残差连接,其中 alphabeta 是可学习的参数。

三、跨阶段部分连接(CSP)

3.1 CSP的提出背景

虽然 ResNet 和 WRC 提供了有效的残差学习和信息融合机制,但在一些更复杂的网络中,信息的传递依然面临冗余和计算开销较大的问题。为了解决这一问题,跨阶段部分连接(CSP) 提出了更加高效的信息传递方式。CSP通过选择性地传递部分信息而不是所有信息,减少了计算量并保持了模型的表达能力。

3.2 CSP的实现

CSP通过分割输入特征,并在不同阶段进行不同的处理,从而减少冗余的信息传递。下面是 CSP 的实现代码。

CSP思想图例如下:

特征分割(Feature Splitting):CSP通过分割输入特征图,并将分割后的特征图分别送入不同的子网络进行处理。一般来说,一条分支的子网络会比较简单,一条分支的自网络则是原来主干网络的一部分。

重点
  1. 部分特征选择性连接:将输入特征分为两部分。每部分特征单独经过卷积处理后,通过 torch.cat() 进行拼接,形成最终的输出。
  2. 跨阶段部分连接:CSP块通过分割输入特征并在不同阶段处理,有效地减少了计算开销,并且保持了网络的表达能力。

四、总结

本文介绍了 残差网络(ResNet)加权残差连接(WRC)跨阶段部分连接(CSP) 这三种网络架构。

finally,求赞求赞求赞~

相关文章:

深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解

随着深度学习技术的不断发展,神经网络架构变得越来越复杂,而这些复杂网络在训练时常常遇到梯度消失、梯度爆炸以及计算效率低等问题。为了克服这些问题,研究者们提出了多种网络架构,包括 残差网络(ResNet)、…...

在Nginx部署Web应用,如何保障后端API的安全

1. 使用HTTPS和http2.0 参考:Nginx配置HTTP2.0_nginx 支持 2.0-CSDN博客 2. 设置严格的CORS策略 通过add_header指令设置CORS头。 只允许来自https://frontend.yourdomain.com的请求访问API location /api/ {if ($http_origin ~* (https://frontend\.yourdomai…...

arm架构 uos操作系统离线安装k8s

目录 操作系统信息 安装文件准备 主机准备 主机配置 配置hosts(所有节点) 关闭防火墙、selinux、swap、dnsmasq(所有节点) 系统参数设置(所有节点) 配置ipvs功能(所有节点) 安装docker(所有节点) 卸载老版本 安装docke…...

OpenCV-Python实战(1)——图像or视频文件处理

1、安装依赖库 pip install opencv-python # 主模块包pip install opencv-contrib-python # 主模块附加模块pip install numpy # numpy 库 2、图像的读取、显示、保存 读取:cv2.imread() img cv2.imread(path, flag) img: cv2.imread()函数返回值&#x…...

Flink SQL Cookbook on Zeppelin 部署使用

简介:对于初学者来说,学习 Flink 可能不是一件容易的事情。看文档是一种学习,更重要的是实践起来。但对于一个初学者来说要把一个 Flink SQL 跑起来还真不容易,要搭各种环境,真心累。很幸运的是,Flink 生态…...

【hackmyvm】DC04靶机wp

created: 2024-12-04 23:08 tags: HMV黄金票据PTTntlm中毒 难度: ⭐️⭐️⭐️⭐️⭐️ 作者: josemlwdf 系统: Windows 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描2.3. 网址利用 3. websvc用户3.1. NTLM中毒攻击3.2. smb探测 4. rtina9…...

记录jvm进程号

日常开发中,相信大家会经常用到这么一行命令: ps -ef | grep xxx.jar | grep -v grep | awk {print $2} | xargs -r kill -9 就是杀掉xxx相关的进程,然后启动,当然也还有其他的方式可以实现类似的功能,我就不列举了&…...

day19——web自动化测试(1)

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、什么是自动化 1.1 概念: 1.2 优点: 2、什么是自动化测试 2.1 自动化测试能解决什么问题? 2.1.1 优点: 2.1.2 误区: 2.2 自动化测试分类…...

go window安装protoc protoc生成protobuf文件

1. 下载: Releases protocolbuffers/protobuf GitHub 2. 解压缩: 3. 配置环境变量: 选择系统变量->Path -> 新增 解压缩后的bin路径 4. 打印版本: protoc --version 5. 安装protoc-gen-go cmd 下输入安装命令&#xff0…...

微信小程序中momentjs无法切换中文问题处理

微信小程序中momentj.s无法切换中文问题处理. 表现为 使用 locale(“zh-cn”)无效。 处理方法 # 1、先删除 miniprogram_npm\moment\index.js # 2、将 node_modules\moment\min\moment-with-locales.min.js 复制到 miniprogram_npm\moment下 并重命名为index.js # 3、修改mi…...

数据结构:链表

链表是一种常见的数据结构,它由一系列节点(Node)组成,每个节点包含两个部分:数据域和指针域。数据域用于存储数据元素的值,而指针域则用于指向链表中的下一个节点。这种结构使得链表能够动态地进行插入和删…...

领克Z20结合AI技术,革新自动驾驶辅助系统

眼瞅着,再有不到 5 个星期,春节就要热热闹闹地登场啦!对于在外辛苦打拼了一整年的打工人而言,回家过年可不就是这一年里心心念念、最最期盼的高光时刻嘛。这不,这几天各地的高速公路愈发熙熙攘攘起来,川流不…...

vector快慢指针+例题详解

1.快慢指针 例题 给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从…...

重温设计模式--1、组合模式

文章目录 1 、组合模式(Composite Pattern)概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式(Composite Pattern)概述 定义:组合模式是一种结构型设计模式,它允许你将对象组合成…...

单片机:实现SYN6288语音播报(附带源码)

单片机实现SYN6288语音播报 SYN6288是一款广泛应用于语音合成的IC,可以通过串口与单片机(如51系列、STM32等)进行通信,实现场景化的语音播报。通过连接外部存储设备(如SD卡)存储语音文件或直接通过内部语音…...

cookie,session,token 的区别

解决什么问题?Cookie(客户端存储)问题来了 Session(会话)解决的问题问题来了 token(令牌)解决的问题问题:token是无状态的如何解决? 解决什么问题? 解决http无状态的问题,说简单点就是用户身份的验证 举个例子: 张三在银行里…...

基于OpenAI Whisper AI模型自动生成视频字幕:全面解析与实战指南

在数字化时代,视频内容已成为信息传播的重要载体。然而,为视频添加字幕却是一项繁琐且耗时的工作。幸运的是,随着人工智能技术的飞速发展,特别是OpenAI Whisper模型的推出,我们有了更加高效、智能的解决方案。 一、Op…...

物理学天空的两朵乌云——量子论与相对论

物理学天空的两朵乌云——量子论与相对论 爱因斯坦的青春与科学的辉煌起点 提到爱因斯坦,我们往往会联想到一个经典的形象——乱糟糟的头发,叼着烟斗,脸上满是岁月的皱纹。然而,这张深入人心的照片并不是他科学创造力的象征。实…...

聚类之轮廓系数

Silhouette Score(轮廓系数)是用于评估聚类质量的指标之一。它衡量了数据点与同簇内其他点的相似度以及与最近簇的相似度之间的对比。 公式 对于一个数据点 i: a(i): 数据点 i 到同簇内其他点的平均距离(簇内不相似度&#xff…...

Jenkins 构建流水线

在 Linux 系统上安装 Jenkins 服务,以及配置自动化构建项目 前置准备环境:docker、docker-compose、jdk、maven 一、环境搭建 1. Jenkins 安装 (1)拉取镜像 # 安装镜像包,默认安装最新版本 docker pull jenkins/jen…...

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

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

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

如何为服务器生成TLS证书

TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...