神经网络基础篇-2-神经网络的层次结构

2023-08-22  本文已影响0人  Mr_Michael

神经网络的层次结构分为三大层:输入层,隐藏层,输出层。其中最为重要的是隐藏层,它包括四大部分:卷积层、激活层、池化层、全连接层。

1.卷积层 Convolution Layer

卷积的原理

卷积层的作用

卷积神经网络的优点

卷积层相关概念

1x1卷积的作用

1x1卷积,可以看成一种全连接(计算量和准确度的一种妥协)。

感受野

1)不同卷积方法及输出维度计算

卷积神经网络相关计算总结

CNN中的参数解释及计算

valid卷积

full卷积

same卷积

反卷积

一种常用的上采样方法。反卷积可以将图像恢复到卷积之前的尺寸,输出尺寸的计算式为:

其中:

2)常用卷积层算子

  1. 一维卷积层算子 (nn.Conv1d):

    用于处理一维的信号数据,如时序数据、文本数据等。它在输入数据的一个滑动窗口上应用可学习的卷积核,产生新的特征图。可以通过改变卷积核大小、填充方式、步长等超参数来控制输出尺寸。

  2. 二维卷积层算子 (nn.Conv2d):

    用于处理二维的图像数据,它通过在输入数据的一个滑动窗口上应用可学习的卷积核,计算出新的特征图。二维卷积层算子也可以通过改变卷积核大小、填充方式、步长等超参数来控制输出尺寸。

  3. 三维卷积层算子 (nn.Conv3d):

    用于处理三维的图像数据,如视频数据等。它在输入数据的一个滑动窗口上应用可学习的卷积核,计算出新的特征图。三维卷积层算子也可以通过改变卷积核大小、填充方式、步长等超参数来控制输出尺寸。

  4. 反卷积层算子 (nn.ConvTranspose2d):

    是卷积层算子的逆过程,用于上采样特征图。将输入数据进行插值,并在插值结果上应用可学习的卷积核,产生新的特征图。同样地,反卷积层算子也可以通过改变卷积核大小、填充方式、步长等超参数来控制输出尺寸。

  5. 深度可分离卷积层算子 (nn.Conv2d(depthwise=True, pointwise=True)):

    是一种轻量级卷积层算子,它将卷积操作分解为两个步骤:深度卷积和逐点卷积。

    • 深度卷积先对输入特征图的每一个通道应用一个可学习的卷积核,产生新的特征图。

    • 逐点卷积则将多个深度卷积的结果在通道维度上进行拼接,并应用另一个可学习的卷积核来产生最终的输出特征图。

2.非线性激活层 Non-Linear Activations

1)常用激活函数

Pytorch的22个激活函数

常用激活函数的比较

从零开始学CV之一激活函数篇(Activation Function)

  1. Sigmoid 函数 (torch.nn.Sigmoid):

    一种典型的压缩型激活函数,将输入值压缩到 0 到 1 的范围内。它在神经网络中广泛使用,特别是在二分类问题中。

  2. Tanh 函数 (torch.nn.Tanh):

    Tanh 函数在输入值较大或较小的情况下,输出值趋向于 1 或 -1,且在输入接近 0 时具有更大的斜率。因此,Tanh 函数比 Sigmoid 函数更适合在神经网络中作为激活函数使用,尤其在对称性问题上有较好的表现,在 RNN 中也有广泛应用。

  3. ReLU 函数 (torch.nn.ReLU):

    一种常用的激活函数,它在输入值大于 0 时返回该值本身,否则返回 0。相对于 Sigmoid 和 Tanh 函数,ReLU 函数具有更好的性能和计算速度,也更容易学习。ReLU 函数的一个变种是 LeakyReLU 函数。

  4. Softmax 函数 (torch.nn.Softmax):

    一种常用的激活函数,根据输入的 logits 在多个类别之间进行归一化,从而得到分类结果。它通常用于分类问题中,输出结果是每个类别的概率分布。

  5. ELU 函数 (torch.nn.ELU):

    一种平滑的激活函数,可以防止梯度消失和过拟合问题。它在输入值小于 0 的情况下也有非零输出,具有类似于 ReLU 函数的优点。相对于 ReLU 函数,ELU 函数可以使训练速度更快,同时也有更好的准确性。

  6. SELU 函数 (torch.nn.SiLU):

    由谷歌提出的一种新型激活函数,它可以优化深度神经网络的性能,尤其是在图像分类和自然语言处理领域。Swish 函数与 Sigmoid 函数类似,但它在输入值较大时还是具有非零输出,可以增强激活函数的非线性性。

3.池化层 Pooling Layer

池化窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当池化窗口滑动到某一位置时,窗口中的输入子数组的最大值/平均值即输出数组中相应位置的元素。

池化层是通过下采样,通过去掉Feature Map中不重要的样本,从而对输入的特征图进行压缩。

池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善结果(不易出现过拟合)。


池化层的作用:

池化方法:

1)常用池化层算子

  1. Max Pooling (torch.nn.MaxPool2d):

    池化层中最常用的一种算子,它通过选取输入张量中每个大小为 kernel_size 的滑动窗口中的最大值,来减小输入特征图的尺寸。Max Pooling 的主要作用是提取特征并减小计算量,同时也有一定抗噪能力。

  2. Average Pooling (torch.nn.AvgPool2d):

    在给定滑动窗口大小的情况下,将窗口中所有像素的平均值作为当前像素的池化值。与 Max Pooling 相比,Average Pooling 能够更为平滑和稳定地减小特征图的尺寸。

  3. Global Average Pooling (torch.nn.AdaptiveAvgPool2d):

    对整个特征图进行操作,将每个通道的所有像素取平均值作为最终的输出特征。与常规平均池化不同,Global Average Pooling 的池化窗口大小动态适应于输入特征图的大小,因此可以更加有效地提取整个特征图的有效信息,而不是只关注其中的部分信息。

  4. Max Unpooling (torch.nn.MaxUnpool2d):

    Max Pooling 的逆运算,可以根据池化之前的位置和最大值,重新生成较高分辨率的特征图。由于 Max Pooling 在池化过程中丢失了输入特征图的某些信息,Max Unpooling 可以帮助模型逆转这些操作。

2)输出维度计算

计算公式同valid卷积

4.归一化层 BN Layer

论文阅读笔记:看完也许能进一步了解Batch Normalization

Batch Normalization(简称BN)就是对每一批数据进行归一化。

备注:采用ReLU激活函数也会有效的解决梯度消失的情况。

1)常用归一化层算子

  1. Batch Normalization (torch.nn.BatchNorm2d):

    在深度学习模型中广泛使用的一种归一化技术,它通过对每个 mini-batch 中的数据进行标准化,来减少训练过程中的内部协变量转移问题。

    主要作用是加速训练过程,同时可以防止梯度消失,提高模型的稳定性。在使用 BN 时,通常要注意输入数据维度与 Batch Normalization 层的通道数对应。

  2. Instance Normalization (torch.nn.InstanceNorm2d):

    在每个样本上执行标准化,而不是在每个 mini-batch 上执行标准化的技术,它通常用于风格迁移等图像合成问题中。Instance Normalization 不会引入 mini-batch 内的变化,并且适用于较小的 mini-batch。

  3. Layer Normalization (torch.nn.LayerNorm):

    在整个层的单个样本上执行标准化,而不是在样本间执行标准化的技术,它可以消除不同样本间特征的依赖关系。Layer Normalization 在适用于 RNNs 和序列数据处理等问题时,效果更好。

5.全连接层 Linear Layer

全连接层的输入是一个向量,每个神经元都与上一层的每个神经元相连接,每个连接都带有一个可学习的权重参数。全连接的核心操作就是矩阵向量乘积y=Wx。

1)常用全连接层算子

  1. torch.nn.Linear

    深度学习模型中常用的一种结构,可以用于实现分类、回归等任务。可以通过适当的设置输入特征的数量和输出特征的数量,来满足不同的需求。主要参数如下:

    • in_features:输入特征的数量。

    • out_features:输出特征的数量。

    • bias:是否添加偏置项。

    • transpose:是否对权重矩阵进行转置。

    • device:指定运行的设备。

6.特征图升维

通过卷积和池化等技术可以将图像进行降维,相反,有时也需要成恢复原分辨率大小的图像,特别是在语义分割领域应用很成熟。

1)上池化(UnPooling)

UnPooling是max pooling的逆操作,将在Maxpooling时保留最大值的位置信息扩充Feature Map,除最大值位置以外,其余补0。

2)上采样(UNSampling)

上采样指的是任何可以让图像变成更高分辨率的技术。最简单的方式是重采样和插值:将输入图片进行rescale到一个想要的尺寸,而且计算每个点的像素点。

UnSampling没有使用MaxPooling时的位置信息,而是直接将内容复制来扩充Feature Map。

在FCN、U-net等网络结构中,涉及到了上采样。

3)反卷积(Deconvolution)

反卷积又称作转置卷积,是卷积的逆过程。最大的区别在于反卷积过程是有参数要进行学习的,理论是反卷积可以实现UnPooling和unSampling。

7.其他

1)常用数学算子(Math Op)

abs、add、cos、ceil、cum、sum、div、exp、floor、log、mean、mul、max、maximum、min、minimum、round、prod、pow、rsqrt、rsub、sin、sqrt、sub、sum、tan

2)逻辑算子(Logical Op)

bitwise_not、bitwise_xor、eq、gt、ge、le、lt、logical_not、logical_xor、ne、where

3)张量算子(Tensor OP)

cat、chunk、clone、expand、expand_as、flatten、flip、permute、repeat、reshape、slice、split、squeeze、stack、tile、transpose、unsqueeze、view、t

8.参数量计算

卷积神经网络CNN中的参数量(parameters)和计算量(FLOPs)

参数量就是指,模型所有带参数的层的权重参数总量。带参数的层主要有:卷积层、BN层、全连接层等。

1)卷积层

计算公式:参数量 = (filterSize × depthIn + bias) × filterNum

2)BN层

BN层有两个需要学习的参数,缩放系数γ和平移系数β(类似减均值除方差)。

计算公式:参数量 = 2 x depthIn

备注:在预测阶段,通常只有一个样本,那么BN层中的均值和方差都是固定的,那就需要用到训练时的均值和方差通过移动平均而得到。

3)全连接层

全连接层中的每个神经元与其前一层的所有神经元进行全连接。

因此,计算公式:参数量 = (Ti + bias) × To

备注:在进行tensorrt模型转换的时候,由于部分算子进行融合,因此总的参数量降低,而显存占用也因此减少。

上一篇 下一篇

猜你喜欢

热点阅读