更复杂的神经网络结构
GoogleNet
GoogleNet,也称为Inception网络,是一种深度卷积神经网络(CNN)架构,由Google的研究团队在2014年提出。它是为了解决图像识别任务而设计的,特别是针对ImageNet大规模视觉识别挑战赛(ILSVRC)。
主要特点:
- Inception模块:GoogleNet的核心是Inception模块,该模块通过不同尺寸的卷积和池化层并行组合,以捕捉不同尺度的特征,从而提高网络的性能。
- 深度与宽度:GoogleNet通过增加网络的深度和宽度来提高其表达能力和准确性。
- 减少参数数量:尽管GoogleNet是一个深度和宽度的网络,但它通过使用1x1的卷积层来减少参数数量和计算量,这有助于避免过拟合并提高计算效率。
- 辅助分类器:在网络的中间层添加了辅助分类器,这些分类器在训练过程中有助于向前传导梯度,防止在网络较深的层中出现梯度消失问题。
Inception模块的结构:
- 1x1卷积层:减少特征图的维度,降低计算复杂度。
- 3x3卷积层:捕获局部特征。
- 5x5卷积层:捕获更大范围的特征。
- 3x3最大池化层:提供局部特征的下采样。
这些层并行连接,然后它们的输出在深度方向上拼接,形成下一层的输入。
GoogleNet的版本:
- Inception v1:最初的GoogleNet架构。
- Inception v2/v3:改进了Inception模块,引入了批量归一化(Batch Normalization)和更有效的卷积分解技术。
- Inception v4/Inception-ResNet:结合了Inception模块和残差连接(Residual Connections)。
蓝色的块是卷积,红色的块是池化,黄色的块是输出,绿色的块是拼接层
减少代码冗余:用函数/类,减少重复工作
用红色圈画出来的块叫做Inception模块,它可以自动从四条分路中找出最优的一条。
从下往上走。
一个典型的Inception模块包含以下四个并行分支:
- 1x1卷积层:这一层用于减少特征图的深度,同时捕获跨通道的相互作用。
- 1x1卷积层后接3x3卷积层:首先通过1x1卷积减少深度,然后使用3x3卷积捕获局部特征。
- 1x1卷积层后接5x5卷积层:与3x3卷积类似,但使用更大的5x5卷积核来捕获更大范围的特征。
- 3x3最大池化层后接1x1卷积层:首先通过3x3的最大池化进行下采样,然后通过1x1卷积减少深度。
每个分支的输出在深度方向上拼接(concatenate),形成模块的最终输出。
1x1卷积通过改变权重调整每个像素的强度,从而可以:
增加或减少通道数(最重要的功能)
调整激活函数的范围
学习特征图之间的关系
与其他卷积层结合使用
1x1卷积通过减少通道数来减少运算量。
在深度学习中,Average Pooling(平均池化)是一种在卷积神经网络(CNN)中使用的池化(Pooling)技术。它的目的是减少计算量,降低模型对位置的敏感度,同时保留重要信息。
先输入通道,再输出通道,再尺寸。
用padding是为了保持尺寸不变。第四个分支加一个branch3x3=self.branch3x3-3(branch3x3)
用cat函数将他们四个连接起来,dim=1表示根据第一个维度通道channel连接(最左边是0)
运行代码展示。fc是全连接层的简称
并不是卷积的次数越多效果越好。可能会导致梯度消失。
Residual net:残差网络的基本构建块是残差块。一个典型的残差块包含几个层(通常是卷积层),以及一个“跳跃连接”(或称为“恒等连接”)。跳跃连接绕过一些层,直接将输入x连接到这些层的输出上,这样输出可以表示为 F(x)+xF(x)+x,其中 F(x)F(x) 是残差块中的层对输入 xx 的处理结果。能解决梯度下降的问题。
ReLU层(Rectified Linear Unit Layer)是深度学习中常用的一种激活函数层,其主要作用是在神经网络中引入非线性因素,使得网络能够学习和模拟更复杂的函数。
网络结构。
不要单纯复现代码,要读懂每个模块的功能。