现代卷积神经网络

一、网络中的网络 (NiN: Network in Network)

        参考:Network In Network——卷积神经网络的革新 - 殷大侠 - 博客园

                  深度学习(二十六)Network In Network学习笔记-CSDN博客

  • ① MLPconv 层

        参考:深度学习基础模型NIN(Network in Network)+Pytorch

  • ② 全局平均池化层(Global Average Pooling, GAP)

        参考:通俗易懂理解全局平均池化(GAP)-CSDN博客

二、含并行连接的网络 (GoogLeNet)

        参考:深入理解GoogLeNet结构(原创)

  • ① Inception块(Inception block)

        GoogLeNet 中的 Inception 块由四条并行路径组成。前 3 条路径分别采用 1×1、3×3 和 5×5 的卷积核,从不同的空间尺度提取特征。中间的 2 条路径在主卷积操作前引入 1×1 卷积,用于降低通道数,从而减少计算量和模型复杂度。第 4 条路径先进行 3×3 最大池化,再通过 1×1 卷积调整通道数。所有路径均采用适当的填充策略,以保持输入与输出在空间尺寸上的一致。最终,将四条路径的输出在通道维度上进行拼接,形成 Inception 块的输出。

        Inception 块中通常需要调节的超参数是各分支中卷积层的输出通道数。

总结:

  • Inception 块本质上是一个包含四条并行路径的子网络,通过不同尺寸的卷积核和最大池化操作并行提取不同尺度的特征。路径中引入的 1×1 卷积用于在像素级别上压缩通道维度,从而有效降低模型的计算复杂度。

  • GoogLeNet 通过将多个结构精巧的 Inception 块与卷积层、全连接层串联构建深层网络结构。其中,各分支通道数的分配比例是在 ImageNet 数据集上经过大量实验调优得到的,以实现计算效率与模型性能之间的良好平衡。

  • GoogLeNet 及其后续版本曾是 ImageNet 挑战中最具竞争力的模型之一,在显著降低计算成本的同时仍保持了接近甚至优于同类模型的分类精度。

三、批量归一化 (bn: Batch Normalization)

        参考:神经网络中的 BN(Batch Normalization)层意义何在

                   Batch Normalization详解以及pytorch实验_pytorch batch normalization-CSDN博客

        下图展示了一个batch size为2(两张图片)的Batch Normalization的计算过程:  

        BN 示例代码: 

        其中 滑动平均值参考 BN/Batch Norm中的滑动平均/移动平均/Moving Average

def batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum):"""实现批量归一化(Batch Normalization)。在训练模式下,使用当前 mini-batch 的均值和方差对输入进行归一化,并更新全局的移动平均均值和方差;在预测模式下,使用训练阶段保存的全局均值和方差。Parameters----------X : torch.Tensor输入张量,形状为 (batch_size, features)(用于全连接层)或(batch_size, channels, height, width)(用于卷积层)。gamma : torch.Tensor缩放参数,形状与特征维度或通道数匹配。beta : torch.Tensor平移参数,形状与特征维度或通道数匹配。moving_mean : torch.Tensor当前的移动平均均值,用于预测阶段。moving_var : torch.Tensor当前的移动平均方差,用于预测阶段。eps : float用于数值稳定性的微小常数,防止除以零。momentum : float用于更新移动平均的动量参数,常取值 0.9 或 0.99。Returns-------Y : torch.Tensor批量归一化后的输出张量,与输入形状相同。updated_moving_mean : torch.Tensor更新后的移动平均均值,脱离计算图。updated_moving_var : torch.Tensor更新后的移动平均方差,脱离计算图。"""if not torch.is_grad_enabled():# 预测模式:使用移动平均统计量X_hat = (X - moving_mean) / torch.sqrt(moving_var + eps)else:assert len(X.shape) in (2, 4)if len(X.shape) == 2:# 全连接层:在特征维上计算均值和方差mean = X.mean(dim=0)var = ((X - mean) ** 2).mean(dim=0)else:# 卷积层:在通道维上计算均值和方差mean = X.mean(dim=(0, 2, 3), keepdim=True)var = ((X - mean) ** 2).mean(dim=(0, 2, 3), keepdim=True)# 使用当前 batch 的统计量进行标准化X_hat = (X - mean) / torch.sqrt(var + eps)# 更新全局移动平均统计量moving_mean = momentum * moving_mean + (1.0 - momentum) * meanmoving_var = momentum * moving_var + (1.0 - momentum) * var# 应用缩放和平移Y = gamma * X_hat + betareturn Y, moving_mean.data, moving_var.data

        PyTorch 中的 BN :

  • 全连接层
class BatchNorm1d(_BatchNorm):r"""对小批量 1D 输入应用批量归一化(Batch Normalization)。适用于输入维度为 (N, C) 或 (N, C, L) 的张量,常用于全连接层或 1D 卷积后的输出。在训练过程中,该层会根据当前批次计算均值和方差;在评估(推理)模式下,使用累计的移动平均均值与方差。数学表达式如下:y = (x - E[x]) / sqrt(Var[x] + eps) * gamma + beta其中:- E[x] 为均值- Var[x] 为方差- gamma 和 beta 是可学习参数,用于缩放和平移参数:num_features (int): 输入特征的维度 C。eps (float): 为了数值稳定性添加到分母中的值,默认 1e-5。momentum (float): 用于更新运行均值和方差的动量,默认 0.1。affine (bool): 若为 True,则该模块包含可学习的缩放参数 gamma 和偏移参数 beta,默认 True。track_running_stats (bool): 若为 True,将跟踪运行时的均值和方差;否则仅使用当前批次统计量,默认 True。输入:- shape: (N, C) 或 (N, C, L)输出:- shape: (N, C) 或 (N, C, L)(与输入相同)示例::>>> bn = nn.BatchNorm1d(128)>>> x = torch.randn(32, 128)>>> y = bn(x)"""
  • 卷积层 
class BatchNorm2d(_BatchNorm):r"""对小批量 4D 输入应用批量归一化(Batch Normalization)。适用于输入维度为 (N, C, H, W) 的张量,常用于 2D 卷积层之后的特征图归一化。数学表达式如下:y = (x - E[x]) / sqrt(Var[x] + eps) * gamma + beta在训练时计算每个通道的均值和方差,并进行标准化;在评估模式下使用移动平均的均值与方差。参数:num_features (int): 输入特征图的通道数 C。eps (float): 为了数值稳定性添加到分母中的值,默认 1e-5。momentum (float): 用于更新运行均值和方差的动量,默认 0.1。affine (bool): 若为 True,该模块包含可学习参数 gamma 和 beta,默认 True。track_running_stats (bool): 若为 True,将记录并使用运行均值和方差,默认 True。输入:- shape: (N, C, H, W)输出:- shape: (N, C, H, W)示例::>>> bn = nn.BatchNorm2d(64)>>> x = torch.randn(8, 64, 32, 32)>>> y = bn(x)"""

四、残差网络 (RessNet)

        参考:ResNet及其变种的结构梳理、有效性分析与代码解读

                   ResNet网络结构详解与模型的搭建_resnet模型结构-CSDN博客

                   ResNet18 网络结构

        残差网络的核心思想是:每个附加层都应该更容易地包含原始函数作为其元素之一。源于嵌套函数( nested function )的思路。

  • 我们希望神经网络中的某些层至少能做到什么都不改变(即恒等映射 H(x) = x);

  • 但传统结构中,神经网络并不容易学会这种恒等映射,因为层层变换和激活函数会“扭曲”输入;

  • 残差结构通过引入跳跃连接(skip connection),天然地包含了恒等映射作为可能的输出形式;

  • 如果需要改变输入,它可以通过残差函数 $F(x)$ 做微调;如果不需要改变输入,它只要让 $F(x) = 0$ 即可。

也就是说,残差结构为网络增加了一个“保守的选择”:最坏的情况它可以什么都不做。

        ResNet 设计要求:

        ①要求2个卷积层的输出与输入形状一样,从而使它们可以相加。

        ②如果想改变输出的通道数和分辨率(H*W),就需要引入一个额外的1×1卷积层来将输入变换成需要的形状后再做相加运算。 

五、稠密连接网络 (DenseNet)

        参考:DenseNet:比ResNet更优的CNN模型

        稠密网络主要由2部分构成:稠密块(dense block)和过渡层(transition layer)。 前者定义如何连接输入和输出,而后者则控制通道数量,使网络不会太复杂。

  • 一个稠密块由多个卷积块组成,每个卷积块使用相同数量的输出通道。 在前向传播中,我们将每个卷积块的输入和输出在通道维度上连接
  • 由于每个稠密块都会带来通道数的增加,使用过多则会过于复杂化模型。 而过渡层可以用来控制模型复杂度。 它通过1×1卷积层来减小通道数,并使用步幅为2的平均池化层减半高度和宽度,从而进一步降低模型复杂度。

       

        注意这里的操作:Sum(相加)操作  Concat(拼接)操作

        ✅ 1. Sum(相加)操作

        全称:element-wise sum,中文:逐元素相加。
        作用:将两个形状完全相同的特征图,按元素相加。

        举例:

        假设有两个张量:

  • A 的 shape 是 [N, C, H, W]

  • B 的 shape 是 [N, C, H, W]

        使用 sum 操作后:

C = A + B  # 逐元素相加
C.shape = [N, C, H, W]

        使用场景:

  • ResNet 中的残差连接(residual connection)

  • 模型融合时的加权

  • 参数少、计算量小

        ✅ 2. Concat(拼接)操作

        全称:concatenation,中文:拼接。
        作用:将两个特征图在通道维度(channel)上进行拼接

        举例:

        假设有两个张量:

  • A 的 shape 是 [N, C1, H, W]

  • B 的 shape 是 [N, C2, H, W]

        使用 concat 操作后:

C = concat(A, B, dim=1)  # 在通道维度上拼接
C.shape = [N, C1 + C2, H, W]

        使用场景:

  • DenseNet 中跨层特征堆叠
  • U-Net 中 encoder 和 decoder 特征图的拼接
  • 提高表达能力(保留两个输入的全部信息)

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

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

相关文章

【大模型面试每日一题】Day 11:参数高效微调方法(如LoRA、Adapter)的核心思想是什么?相比全参数微调有何优缺点?

【大模型面试每日一题】Day 11:参数高效微调方法(如LoRA、Adapter)的核心思想是什么?相比全参数微调有何优缺点? 📌 题目重现 🌟🌟 面试官:参数高效微调方法&#xff0…

SSL泄露源IP怎么办?(教学与防护)

在网络安全领域,源IP地址的保护至关重要。通常情况下,我们借助CDN(内容分发网络)技术来隐藏源IP,使外部通过常规的ping命令无法获取。然而,由于部分网站模板存在漏洞,当用户访问https://ip时&am…

jQuery的学习要领

学习 jQuery 的关键要领可以分为以下几个核心部分,帮助你高效掌握并灵活运用: 1. 理解 jQuery 的核心思想 "Write Less, Do More":jQuery 通过简洁的语法封装复杂操作。 链式调用(Chaining):通过…

网络安全的原理和基本知识点

以下是网络安全的基本原理和知识点,以及如何利用Python进行网络安全防护: 网络安全的基本原理和知识点 基本概念 网络安全:保护网络系统和数据免受攻击、损坏或未经授权的访问,确保其机密性、完整性和可用性。 CIA三要素 机密…

AI:机器学习之无监督学习

无监督学习:让机器从“混沌”中自我觉醒 🧠🌌 🧭 摘要:无监督学习(Unsupervised Learning)是机器学习的重要分支,它不依赖于人工标签,通过自身“感知”数据结构来发现潜在模式。本文系统梳理了其核心概念、典型算法、实际应用与代码实战,既适合入门学习,也适用于…

写了个脚本将pdf转markdown

看到有人需要将扫描pdf文档转markdown,想起之前写的一个小工具。 这个脚本是为了将pdf转成markdown,只需要申请一个智谱的api key,并填到config里,使用的模型是4v flash,免费的,所以可以放心使用。 效果如下…

CSS--图片链接水平居中展示的方法

原文网址&#xff1a;CSS--图片链接居中展示的方法-CSDN博客 简介 本文介绍CSS图片链接水平居中展示的方法。 图片链接 问题复现 源码 <html xml:lang"cn" lang"cn"><head><meta http-equiv"Content-Type" content"te…

工具分享:通过滑块拉取CAN报文信号数值自动发送报文

0. 概述 CAN报文发送工具使用wxpython进行开发,配套Excel模板可以通过修改Excel自定义界面展示的信号名称和信号的属性;同时,工具支持导入现场采集的报文数据自动按照配套Excel模板定义的报文发送周期进行模拟发送。 由于是我好几年前开发的作品,一些开发细节也记得不是很…

【Python】os模块

os 模块是 Python 标准库中用于与操作系统交互的核心模块&#xff0c;提供了许多操作文件和目 录的函数。 1. 基本介绍 os 模块提供了以下主要功能&#xff1a; 文件和目录操作路径操作进程管理环境变量访问 import os2. 常用功能分类 2.1 文件和目录操作 函数/方法描述o…

ai agent(智能体)开发 python3基础11: java 调用python waitfor卡死,导致深入理解操作系统进程模型和IPC机制

java 调用python waitfor 卡死 导致浏览器无法自动关闭&#xff0c;java &#xff0c;python双发无限等待 根源在于还是没有理解 进程之间标准输入输出到底是什么含义 系统进程与跨语言调用的核心机制 在跨语言调用&#xff08;如Java调用Python&#xff09;时&#xff0c;理…

Kubernetes(k8s)学习笔记(九)--搭建多租户系统

K8s 多租户管理 多租户是指在同一集群中隔离多个用户或团队&#xff0c;以避免他们之间的资源冲突和误操作。在K8s中&#xff0c;多租户管理的核心目标是在保证安全性的同时&#xff0c;提高资源利用率和运营效率。 在K8s中&#xff0c;该操作可以通过命名空间&#xff08;Nam…

同质化的旅游内核

湘西凤凰古城、北京非常有文艺氛围的方家胡同都在被改造翻新为现代的其他城市范式式的样式。 什么意思呢&#xff1f;很多古城的老房子&#xff0c;从外面看&#xff0c;很古老、很漂亮&#xff0c;但是进去以后&#xff0c;完全不是那么回事&#xff0c;整座房子已经被完全掏…

鸿蒙开发——3.ArkTS声明式开发:构建第一个ArkTS应用

鸿蒙开发——3.ArkTS声明式开发:构建第一个ArkTS应用 一、创建ArkTS工程二、ArkTS工程目录结构&#xff08;Stage模型&#xff09;三、构建第一个页面四、构建第二个页面五、实现页面之间的跳转六、模拟器运行 一、创建ArkTS工程 1、若首次打开DevEco Studio&#xff0c;请点击…

C语言初阶:数组

目录 0.数组要讲的知识点 1.一维数组的创建和初始化 1.1 数组的创建&#xff1a; 1.2数组实例&#xff1a; 1.3 数组的初识化&#xff1a; 例子&#xff1a; 2.一维数组的使用 例子&#xff1a; 总结&#xff1a; 3.一维数组在内存中的存储 4.二维数组的创建和初始化 4.…

UE5 Daz头发转Blender曲线再导出ABC成为Groom

先安装Daz to Blender Import插件 【神器】 --DAZ一键导入blender插件的详细安装和使用&#xff0c;自带骨骼绑定和控制器&#xff0c;多姿势动画&#xff0c;Importer桥接插件_哔哩哔哩_bilibili 然后安装DAZHairConverter插件 一分钟将DAZ头发转化成Blender粒子毛发_哔哩哔…

浅聊find_package命令的搜索模式(Search Modes)

背景 find_package应该算是我们使用最多的cmake命令了。但是它是如何找到上游库的.cmake文件的&#xff1f; 根据官方文档&#xff0c;整理下find_package涉及到的搜索模式。 搜索模式 find_package涉及到的搜索模式有两种&#xff1a;模块模式(Module mode)和配置模式(Conf…

什么是先验?(CVPR25)Detail-Preserving Latent Diffusion for Stable Shadow Removal论文阅读

文章目录 先验&#xff08;Prior&#xff09;是什么&#xff1f;1. 先验的数学定义2. 先验在深度生成模型中的角色3. 为什么需要先验&#xff1f;4. 先验的常见类型5. 如何选择或构造先验&#xff1f;6. 小结 先验&#xff08;Prior&#xff09;是什么&#xff1f; 在概率统计…

【视觉基础模型-SAM系列-2】SAM2: Segment Anything in Images and Videos

论文链接&#xff1a;SAM 2: Segment Anything in Images and Videos 代码链接&#xff1a;https://github.com/facebookresearch/sam2?tabreadme-ov-file 作者&#xff1a;Nikhila Ravi, Valentin Gabeur, Yuan-Ting Hu, Ronghang Hu, Chaitanya Ryali, Tengyu Ma, Haitham…

OpenShift AI - 模型注册管理

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.18 OpenShift AI 2.19 的环境中验证 文章目录 启用模型注册管理功能安装管理数据库启用模型注册功能 注册模型部署模型归档模型归档模型和模型版本恢复归档模型 模型注册表访问权限管理参考…

【背包dp----01背包】例题三------(标准的01背包+变种01背包1【恰好装满背包体积 产生的 最大价值】)

【模板】01背包 题目链接 题目描述 : 输入描述: 输出描述: 示例1 输入 3 5 2 10 4 5 1 4输出 14 9说明 装第一个和第三个物品时总价值最大&#xff0c;但是装第二个和第三个物品可以使得背包恰好装满且总价值最大。 示例2 输入 3 8 12 6 11 8 6 8输出 8 0说明 装第三个物…