12.8深度学习_经典神经网络_GoogleNet

一、1×1卷积

1. 1×1卷积由来

卷积核的尺寸等于1的特例,来自《Network in Network》。

2. 1×1卷积作用

2.1 实现通道间特征的融合

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

常规转换公式:0.2989R + 0.5870G + 0.1140B

2.2 瓶颈结构设计

两头宽,中间窄的网络结构。

  • 如果一个输入特征大小为N1×H×W, 使用N1×N2个1×1卷积,就可以将其 映射为N2×H×W大小的特征。
  • 当N1>N2,就实现了通道降维。

2.3 瓶颈结构的参数压缩效果

  • 输入通道数为192,输出通道数为128
  • 普通3×3卷积,参数量为128×192×3×3=221184
  • 1×1卷积进行降维到96个通道,然后再用3×3升维到128 ,则参数量为:96×192×1×1+128×96×3×3=129024

2.4 纺锤型结构设计

二、GoogleNet

1. 铭记历史

​ GoogLeNet(InceptionNet)取得了2014年ImageNet分类大赛的冠军,参数量远小于VGG系列网络,而精度和速度则超越了VGG系列。

​ GoogLeNet的主要特点是采用了一种名为“Inception”模块的结构,该模块可以有效地捕捉图像中的多尺度特征
在Inception模块中,网络结构被分成多个并行的分支,每个分支都用于捕捉不同尺度的特征。这样,GoogLeNet网络就可以更有效地学习图像的特征,并且还可以减少网络的体积。

​ GoogLeNet还采用了一种名为“平均池化”的技术,该技术可以在不改变图像尺寸的情况下对图像进行降采样。这样,GoogLeNet网络就可以更快地处理图像,并且还可以提高网络的鲁棒性。

2. 网络结构

image-20240528205946257

多尺度,更宽,分组的网络设计

3. 基本单元Inception Module

​ Inception结构由谷歌的研究人员在2014年提出,它的名字来源于电影《盗梦空间》,因为它设计时使用了多个并行的卷积神经网络模块,这些模块之间形成了一个嵌套的结构,就像人在梦中穿梭于不同场景中一样。

​ Inception结构的思想和之前的卷积思想不同,LeNet-5模型是将不同的卷积层通过串联连接起来的,但是Inception结构是通过串联+并联的方式将卷积层连接起来的。

​ Inception结构是对输入图像并行地执行多个卷积运算或池化操作,并将所有输出结果拼接为一个非常深的特征图,且不同大小卷积核的卷积运算可以得到图像中的不同信息,处理获取到的图像中的不同信息可以得到更好的图像特征,一个Inception结构如下图所示。

image-20240528210200263

​ Inception结构通常用于图像分类和识别任务,因为它能够有效地捕捉图像中的细节信息。它的主要优势在于能够以高效的方式处理大量的数据,并且模型的参数量相对较少,这使得它能够在不同的设备上运行。

3.1 1×1卷积位置

​ 放置在前,通道降维;

​ 放置在后,更好地维持性能;

4. GoogLeNet模型结构

在paper中给出了网络结构的图,如下图所示:

5. 模型训练

​ 辅助分类器通常与主要的分类器结合使用,以帮助模型更好地理解图像中的细节和复杂模式。这种技术可以提高模型的泛化能力,使其更准确地预测未知的图像。

​ 在GoogLeNet中有两个辅助分类器,分别在Inception4a和Inception4d,它们的结构如下图所示:

训练时,额外的两个分类器的损失权重为0.3,推理时去除。

6. 性能表现

ILSVRC 2014竞赛中获得第一名。

7. 代码实现

下面是使用PyTorch搭建GoogLeNet(Inception v1)网络模型的代码。GoogLeNet是一种深度卷积神经网络,具有Inception模块结构,这种结构通过不同大小的卷积核提取多尺度特征。

import torch
import torch.nn as nn
import torch.nn.functional as F

class Inception(nn.Module):
    def __init__(self, in_channels, ch1x1, ch3x3red, ch3x3, ch5x5red, ch5x5, pool_proj):
        super(Inception, self).__init__()
        self.branch1 
### 问题分析 当遇到 `Torch not compiled with CUDA enabled` 的错误时,通常是因为安装的 PyTorch 版本与系统的 CUDA 配置不一致。对于 Windows 系统而言,确保正确的驱动程序和 CUDA 工具链版本至关重要。 以下是对问题的具体解答以及如何处理 CUDA 12.8.1 相关的驱动或安装文件的方法。 --- ### 方案一:验证系统环境 #### 检查硬件和驱动 在 Windows 系统中,可以通过 NVIDIA 控制面板或者命令提示符来检查显卡及其驱动版本。打开命令提示符并输入以下命令: ```cmd nvidia-smi ``` 此命令会显示当前 GPU 的型号、驱动版本以及已加载的 CUDA 库版本[^1]。如果结果显示的 CUDA 版本低于所需的目标版本(即 12.8.1),则需要更新驱动程序。 #### 更新显卡驱动 访问 [NVIDIA 官方驱动下载页面](https://www.nvidia.com/Download/index.aspx),根据操作系统和显卡型号选择最新的驱动版本进行安装。请注意,某些较新的驱动可能会附带更高版本的 CUDA 支持工具链。 --- ### 方案二:安装适配版本的 CUDA Toolkit 即使拥有最新驱动,仍需单独安装与之匹配的 CUDA Toolkit 才能在开发环境中充分利用 GPU 功能。针对 CUDA 12.8.1,目前尚未有正式发布的稳定版本(截至撰写时间)。然而,可以采取如下措施: #### 下载预览版或测试版 部分开发者可能提前发布了实验性质的 CUDA Toolkit 测试版本。这些资源一般可通过 NVIDIA 开发者计划获取。注册成为开发者后,在专属门户寻找早期访问通道链接。 #### 使用替代方案 假如暂时无法获得确切编号为 12.8.1 的发行包,考虑选用接近数值范围内的其他候选选项作为权宜之计。例如,尝试安装 CUDA 12.x 系列中的某个公开可用子版本,并调整后续依赖关系设置以适应实际情况。 --- ### 方案三:重新配置 PyTorch 安装参数 完成上述准备工作之后,回到 PyTorch 自身的构建环节上来。为了使框架能够识别新部署好的 CUDA 基础设施,请按照下面指导操作: #### 利用 pip 进行定制化安装 通过指定额外标志位告知 pip 构建器期望采用哪套底层加速技术栈。比如这样一条典型语句即可满足大部分场景下的需求: ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu12x ``` 这里,“cu12x”代表适用于 CUDA 12.x 的扩展索引地址集合。务必替换为你实际拥有的具体次版本号字符串形式表达式。 #### Conda 用户专用指令集 如果是基于 Anaconda 发行版管理软件生态体系的话,则应改用 conda 来同步引入相应组件群组: ```bash conda install pytorch torchvision torchaudio cudatoolkit=12.x -c pytorch ``` --- ### 其他注意事项 - **交叉平台差异性**:尽管本文重点讨论的是 Windows 平台上的实现细节,但 Linux/macOS 用户同样面临相似挑战。因此了解跨 OS 行为模式有助于更全面解决问题。 - **社区反馈价值**:积极查阅 GitHub Issues 或 Stack Overflow 讨论区里关于同类主题的经验分享贴文往往能带来意想不到的帮助线索。 --- ### 示例总结 最终确认整个流程无误的方式就是编写一小段简单的脚本来观察预期行为表现是否符合设想。像这样的例子就非常适合用来做初步验证工作: ```python import torch print(torch.cuda.is_available()) # Should output True if everything is correctly set up. print(torch.version.cuda) # Displays the active cuda version recognized by PyTorch. ``` 如果以上两步均返回理想结果,则说明问题得到妥善解决。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值